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

DMIT:香港国际线路vps,1.5GB内存/20GB SSD空间/4TB流量/1Gbps/KVM,$9.81/月

DMIT怎么样?DMIT是一家美国主机商,主要提供KVM VPS、独立服务器等,主要提供香港CN2、洛杉矶CN2 GIA等KVM VPS,稳定性、网络都很不错。支持中文客服,可Paypal、支付宝付款。2020年推出的香港国际线路的KVM VPS,大带宽,适合中转落地使用。现在有永久9折优惠码:July-4-Lite-10OFF,季付及以上还有折扣,非 中国路由优化;AS4134,AS4837 均...

RFCHOST - 洛杉矶CN2 GIA VPS季付23.9美元起 100Mbps带宽

RFCHOST,这个服务商我们可能有一些朋友知道的。不要看官网是英文就以为是老外服务商,实际上这个服务商公司在上海。我们实际上看到的很多商家,有的是繁体,有的是英文,实际上很多都是我们国人朋友做的,有的甚至还做好几个品牌域名,实际上都是一个公司。对于RFCHOST商家还是第一次分享他们家的信息,公司成立大约2015年左右。目前RFCHOST洛杉矶机房VPS正进行优惠促销,采用CN2优化线路,电信双...

HostKvm - 夏季云服务器七折优惠 香港和韩国机房月付5.95美元起

HostKvm,我们很多人都算是比较熟悉的国人服务商,旗下也有多个品牌,差异化多占位策略营销的,商家是一个创建于2013年的品牌,有提供中国香港、美国、日本、新加坡区域虚拟化服务器业务,所有业务均对中国大陆地区线路优化,已经如果做海外线路的话,竞争力不够。今天有看到HostKvm夏季优惠发布,主要针对香港国际和韩国VPS提供7折优惠,折后最低月付5.95美元,其他机房VPS依然是全场8折。第一、夏...

glpushmatrix为你推荐
身份证正反面图片身份证正反面照片。本人手持身份证照片。 银行卡正反面照片。 本人电话号码就能办信用卡真的吗qq业务查询我想查看QQ业务的到期时间,怎么查?数据监测毕业论文检测,万方数据检测结果可靠吗?跟知网的有多少差距啊?求以往学长学姐解释。y码亚洲码男女尺码是多少?视频技术短视频运营每天的工作是做什么?需要所学的技术都有什么方面?腾讯公告腾讯出什么事了 所有QQ用户空间农场什么的都打不开 有的连空间都进不去 又受攻击了?自定义表情QQ自定义表情assemblyinfo什么是GAC超级播放器那种电影网站就是那种不需要下载播放器可以直接看bt代理为什么用代理下载BT非常非常慢啊?
国内最好的虚拟主机 免费试用vps 企业主机 阿里云os 174.127.195.202 线路工具 789电视 什么是服务器托管 太原网通测速平台 移动服务器托管 便宜空间 重庆电信服务器托管 lamp兄弟连 阿里云邮箱登陆 建站技术 中美互联网论坛 symantec ftp是什么东西 电信测速器在线测网速 内存 更多