glpushmatrixopengl 中的camera控制方法

glpushmatrix  时间:2021-06-05  阅读:()

请教unity 制作tilemap的流程

using UnityEngine; using System.Collections; using UnityEditor; [ExecuteInEditMode] public class TilemapEditor : MonoBehaviour { public Material material; Vector2 middlePoint; public Vector2 one; public Vector2 two; public Vector2[] list; Vector2[] pointone=new Vector2[50]; Vector2[] pointtwo=new Vector2[50]; Vector2[] pointThree= new Vector2[50]; Vector2[] pointFour= new Vector2[50]; public float test; // Use this for initialization void Start () { // Handles.DrawLine(new Vector3(0,0,0),new Vector3(100,300,0)); } // Update is called once per frame void Update () { // Debug.DrawLine(new Vector3(0,0,0),new Vector3(100,300,0)); } void OnPostRender() { if(!material) { return; } material.SetPass(0); GL.PushMatrix(); GL.LoadOrtho(); // GL.MultMatrix(transform.localToWorldMatrix); GL.Begin(GL.LINES); for(int i=0; i<20;i++) { pointone[i]= Vector2.Lerp(two,one,test*i); pointtwo[i]=Vector2.Lerp(list[0],new Vector2(two.x,two.y-(two.y-one.y)*2),test*i); pointThree[i]=Vector2.Lerp(two,list[0],test*i); pointFour[i]= Vector2.Lerp(one,new Vector2(two.x,two.y-(two.y-one.y)*2),test*i); } // pointone[0]= Vector2.Lerp(two,one,test); // pointtwo[0]=Vector2.Lerp(list[0],new Vector2(two.x,two.y-(two.y-one.y)*2),test); DrawLine(one.x,one.y,two.x,two.y); DrawLine(list[0].x,list[0].y,two.x,two.y); DrawLine(one.x,one.y,two.x,two.y-(two.y-one.y)*2); DrawLine(two.x,two.y-(two.y-one.y)*2,list[0].x,list[0].y); for(int i=0; i<20;i++) { DrawLine(pointone[i].x,pointone[i].y,pointtwo[i].x,pointtwo[i].y); DrawLine(pointThree[i].x,pointThree[i].y,pointFour[i].x,pointFour[i].y); } GL.End(); GL.PopMatrix(); } void DrawLine(float x1,float y1,float x2,float y2) { // GL.PushMatrix(); GL.Vertex(new Vector3(x1/Screen.width,y1/Screen.height,0)); GL.Vertex(new Vector3(x2/Screen.width,y2/Screen.height,0)); // GL.PushMatrix(); } // void OnSceneGUI() // { // Handles.color=Color.blue; // HandleUtility.Repaint(); // } }

Opengl中的glLoadName 和 glPushName有什么区别

glBindTexture(GL_TEXTURE_2D, g_Texture[0]); glLoadName(SUN); glBegin(GL_LINES); glEnd(); glPushMatrix(); glTranslatef(0, 0, 0); glRotatef(SunRotation, 0, 1.0, 0); gluSphere(pObj, 0.5f, 20, 20); glPopMatrix(); glEnd();

解析一段OpenGL的小程序

我不知道我是否能回答你的问题,但是我把提示写在程序边上。

void display(void)
{
node* point;

//清空颜色缓存和深度缓存。


glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
point = points;
while (point) {

// 压入一个modelmatrix 到modelmatrix stack上

//modelmatrix指对物体所作的线性变换,你可以参考OpenGL红宝书

// 下面的glTranslatef指加入一个平移变换
glPushMatrix();

//指定当前的颜色是point->r, point->g, point->b
glColor3ub(point->r, point->g, point->b);

//做一个平移变换,在弹出这个model matrix 之前,

// 所有的几何都是基于以(point->x, point->y,0)为原点的坐标系。


glTranslatef(point->x, point->y, 0.0);

//画一个Cone.坐落于 (point->x, point->y, 0.0)

// 这个时候的深度判断函数是Less,就是说明这个Cone会被前面画的几何遮挡。


glutSolidCone(400, 1.0, 32, 1);
if (point) {

//这相当于关闭深度判断
glDepthFunc(GL_ALWAYS);
// 设为红色

glColor3f(1, 0, 0);

//画Cone的顶点,这样不论怎样

// 顶点都可以画出来,不会被其他几何遮挡
glBegin(GL_POINTS);
glVertex2i(0, 0);
glEnd();

// 重置深度判断函数
glDepthFunc(GL_LESS);
}

// 弹出那个平移变换,这样空间又回到标准空间
glPopMatrix();

// 画下一个Cone
point = point->next;
}

glutSwapBuffers();
}

glLightfv如何使用

penGL编程轻松入门之使用光照和材质 2006-05-1811:24作者:黄燕出处:天极开发责任编辑:方舟 使用了光照和材质可以使物体更逼真,具有立体感。

例4就是没有使用光照使呈现在我们眼前的物体茶壶和立方体没有立体感。

  例6:绘制三个使用不同材质的球体。

#include <windows.h> #include <GL/glut.h> GLfloat light_position[] = {0.0,3.0,6.0,0.0}; GLfloat no_mat[] = {0.0,0.0,0.0,1.0}; GLfloat mat_grey_ambient[] = {0.5,0.5,0.5,1.0}; GLfloat mat_red_ambient[] = {0.0,0.0,1.0,1.0}; GLfloat mat_diffuse[] = {0.8,0.2,0.5,1.0}; GLfloat mat_specular[] = {1.0,1.0,1.0,1.0}; GLfloat no_shininess[] = {0.0}; GLfloat low_shininess[] = {5.0}; GLfloat high_shininess[] = {100.0}; GLfloat mat_emission[] = {0.3,0.2,0.2,0.0}; void myInit(void) { glLightfv(GL_LIGHT2,GL_POSITION,light_position);//设置光源 glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS);//指定深度比较中使用的数值 glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glShadeModel(GL_SMOOTH); } void display(void) { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); /*为光照模型指定材质参数*/ glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,high_shininess); glMaterialfv(GL_FRONT,GL_EMISSION,no_mat); glColorMaterial(GL_FRONT,GL_AMBIENT);//使材质色跟踪当前颜色 glEnable(GL_COLOR_MATERIAL); /*第一个球形*/ glPushMatrix(); glColor3fv(no_mat); glTranslatef(-2.5,1.5,0.0); glRotatef(15.0,1.0,0.0,0.0); glutSolidSphere(1.2,20.0,20.0); glPopMatrix(); /*第二个球形*/ glPushMatrix(); glColor3fv(mat_grey_ambient); glRotatef(15.0,1.0,0.0,0.0); glutSolidSphere(1.2,20.0,20.0); glPopMatrix(); /*第三个球形*/ glPushMatrix(); glColor3fv(mat_red_ambient); glTranslatef(2.5,-1.5,0.0); glRotatef(15.0,1.0,0.0,0.0); glutSolidSphere(1.2,20.0,20.0); glPopMatrix(); glDisable(GL_COLOR_MATERIAL); glPopMatrix(); glFlush(); } void myReshape(int w,int h) { glViewport(0,0,(GLsizei)w,(GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w <= h) glOrtho(-5.5,5.5,-5.5*(GLfloat)h/(GLfloat)w,5.5*(GLfloat)h/(GLfloat)w,-5.5,5.5); else glOrtho(-5.5*(GLfloat)w/(GLfloat)h,5.5*(GLfloat)w/(GLfloat)h,-5.5,5.5,-5.5,5.5); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc,char ** argv) { /*初始化*/ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400,400); glutInitWindowPosition(100,100); /*创建窗口*/ glutCreateWindow(" Light&Material "); /*绘制与显示*/ myInit(); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMainLoop(); return 0; }   函数myInit中: ·glLight设置光源的参数。

有三个参数,第一个参数指定光照的数目,最大为8。

第二个参数为光照的单值光源参数。

第三个参数为赋给第二个参数的值,本例中即为将light_position的值赋值给GL_POSITION。

display函数中: ·glMaterial为光照模型指定材质参数。

第一个参数为改变材质的面,其值必为GL_FRONT, GL_BACK或GL_FRONT_AND_BACK中的一个。

第二个参数为需要改变的材质参数。

第三个参数为赋给参数二的值或指向值的指针。

本例中均为指针。

·glColorMateria使材质色跟踪当前颜色。

第一个参数指定哪一个面需要使材质色跟踪当前颜色。

第二个参数指定哪个参数需要跟踪颜色。

OpenGL中的坐标转换!详细一点希望看到每一步执行完时的具体坐标以及转换的顺序等!谢谢大神了

先前我在调用OpenGL开发图形环境时,坐标变换也曾困扰我好长一阵子,记得当时是在为每个图形实例配置各自的轨迹球时要求修正轨迹球算法。

言归正传,首先您须知道OpenGL中的矩阵为列主序矩阵,这是您关于OpenGL矩阵变换进行正确理解与运用的大前提(若对此没有概念请先花半小时上网弄明白,这里不赘述)。

其次需要注意,对于坐标变换矩阵操作的有两种理解方式,不妨称“顺式”与“反式”(若不明白还请自已上网查阅,这里点到为止),都是正确的,在不同的时候选择恰当的理解方式可以事半功倍哦!就本例子而言“顺式”理解更为方便 下面分析相关代码: glPushMatrix();将当前的变换矩阵压栈,允许之后通过矩阵弹栈以撤销之间的变换操作(好比系统还原中设置“还原点”) glTranslatef( -0.3, 0.0, 0.0); 这是您问题的重点吧?!先来普及知识: OpenGL中有个绝对坐标系,它以屏幕中心为原点,水平向右为X轴,竖直向上为Y轴,垂直屏幕向外为Z轴。

在“顺式”理解下,该坐标系是不动的,而想象初始时你就出在原点位置,眼睛看着Z轴负方向,1.随后命令——glTranslatef( -0.3, 0.0, 0.0);好,这下你沿X负方向走了0.3f,来到(-0.3, 0.0, 0.0)处(注意你并没有转头,眼睛仍然看着Z轴负方向) 2.再命令glRotatef( (GLfloat)sh, 0.0, 0.0, 1.0 );对,你以Y轴正方向为转轴将脑袋身子扭转了sh角,但注意你的位置并未改变。

3.又glTranslatef(1.0, 0.0, 0.0);这下你沿X正方向走了1.0f,但重点注意!!——这里的X轴是相对你而言的,不是绝对坐标系中的X轴(所谓“顺式”就体现在这里),即每一步变换都是在如下坐标系中进行的:你眼睛看着的是Z轴负方向,脑袋指向Y轴正方向,右手边为X轴正方向 glPushMatrix();再次压栈 4.glScalef(2.0, 0.4, 1.0);将尺度进行缩放,该步骤无所谓坐标系 glutWireCube(1.0);你在自己的位置放了一个立方体,至于你自己在哪里,应很容易便可算出吧~ glPopMatrix();弹栈,即还原至第4步前的变换状态 相信已解释得够通俗的了,不懂再问吧~

opengl 中的camera控制方法

gluLookAt() 是从哪个方向,哪个远近看物体,即,计算投影。

glRotatef() 是空间里转动物体,改变物体在空间的坐标。

glTranslatef() 是空间里平移物体,改变物体在空间的坐标。

用 glPushMatrix(); 。









glPopMatrix(); 把要变换的括起来,这两句东西类似括号,用来括矩阵变换。

glPushMatrix(); // 进一层 glTranslatef(...); glPushMatrix(); // 再进一层 glRotatef(..); 画三角形1 glPopMatrix(); // 退回一层 glPopMatrix(); // 再退回一层 画三角形2

EdgeNat 新年开通优惠 - 韩国独立服务器原生IP地址CN2线路七折优惠

EdgeNat 商家在之前也有分享过几次活动,主要提供香港和韩国的VPS主机,分别在沙田和首尔LG机房,服务器均为自营硬件,电信CN2线路,移动联通BGP直连,其中VPS主机基于KVM架构,宿主机采用四路E5处理器、raid10+BBU固态硬盘!最高可以提供500Gbps DDoS防御。这次开年活动中有提供七折优惠的韩国独立服务器,原生IP地址CN2线路。第一、优惠券活动EdgeNat优惠码(限月...

盘点618年中大促中这款云服务器/VPS主机相对值得选择

昨天有在"盘点2021年主流云服务器商家618年中大促活动"文章中整理到当前年中大促618活动期间的一些国内国外的云服务商的促销活动,相对来说每年年中和年末的活动力度还是蛮大的,唯独就是活动太过于密集,而且商家比较多,导致我们很多新人不懂如何选择,当然对于我们这些老油条还是会选择的,估计没有比我们更聪明的进行薅爆款新人活动。有网友提到,是否可以整理一篇当前的这些活动商家中的促销产品。哪些商家哪款产...

Ftech:越南vps,2核/2G/20G SSD/1Gbps不限流量/可安装Windows系统,$12.5月

ftech怎么样?ftech是一家越南本土的主机商,成立于2011年,比较低调,国内知道的人比较少。FTECH.VN以极低的成本提供高质量服务的领先提供商之一。主营虚拟主机、VPS、独立服务器、域名等传统的IDC业务,数据中心分布在河内和胡志明市。其中,VPS提供1G的共享带宽,且不限流量,还可以安装Windows server2003/2008的系统。Ftech支持信用卡、Paypal等付款,但...

glpushmatrix为你推荐
视频压缩算法MP4视频压缩,比特率如何计算。视频压缩算法视频压缩原理视频压缩算法视频压缩方式华为总裁女儿为啥姓孟孟晚舟是谁人肉搜索引擎人肉搜索引擎是干什么的?防火墙排名什么防火墙最好云计划什么是云查杀,云计算和云计划的关系?xcelsiussap bi是什么文本框透明word里文本框怎么透明?什么是网络地址手机IP地址是什么?
最新代理服务器地址 泛域名解析 淘宝二级域名 本网站服务器在美国维护 独享100m 天猫双十一秒杀 免费smtp服务器 本网站服务器在美国 789电视 银盘服务 服务器防火墙 lamp怎么读 阿里云邮箱申请 512内存 windowssever2008 建站论坛 超低价 内存 qq部落24-5 电脑主机打不开 更多