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

优林云(53元)哈尔滨电信2核2G

优林怎么样?优林好不好?优林 是一家国人VPS主机商,成立于2016年,主营国内外服务器产品。云服务器基于hyper-v和kvm虚拟架构,国内速度还不错。今天优林给我们带来促销的是国内东北地区哈尔滨云服务器!全部是独享带宽!首月5折 续费5折续费!地区CPU内存硬盘带宽价格购买哈尔滨电信2核2G50G1M53元直达链接哈尔滨电信4核4G50G1M83元直达链接哈尔滨电信8核8G50G1M131元直...

HostKvm5.95美元起,香港、韩国可选

HostKvm发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付仅5.95美元起。这是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面分享几款香港VPS和韩国VPS的配置和价格信息。...

CloudCone2核KVM美国洛杉矶MC机房机房2.89美元/月,美国洛杉矶MC机房KVM虚拟架构2核1.5G内存1Gbps带宽,国外便宜美国VPS七月特价优惠

近日CloudCone发布了七月的特价便宜优惠VPS云服务器产品,KVM虚拟架构,性价比最高的为2核心1.5G内存1Gbps带宽5TB月流量,2.89美元/月,稳定性还是非常不错的,有需要国外便宜VPS云服务器的朋友可以关注一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器提供商,国外实力大厂,自己开...

glpushmatrix为你推荐
宝应中学宝应初级中学有哪些csonline2反恐精英online2什么时候出企业资源管理系统企业内部管理系统有哪些数据监测毕业论文检测,万方数据检测结果可靠吗?跟知网的有多少差距啊?求以往学长学姐解释。y码S`M`XXL`L`XL身高体重分别是多少?qq博客怎么开QQ博客啊asp大马问:ASP是什么?ASP根据什么制作木马的?ASP木马和大马有什么区别?云计划什么是云查杀,云计算和云计划的关系?云盘网谁知道免费的网盘?点心os现有的基于安卓深度优化的MUUI、点心OS、CM7、乐众ROM、乐蛙,这些哪个好?各自特点?给个排名。
免备案虚拟主机 krypt 外贸主机 美国主机网 mach bash漏洞 搜狗抢票助手 好看的桌面背景图片 网页背景图片 免费smtp服务器 免费mysql bgp双线 谁的qq空间最好看 域名评估 中国电信测速网 网购分享 云服务器比较 mteam tracker服务器 hosting24 更多