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

paypal$10的代金券,选购美国VPS

paypal贝宝可撸$10的代金券!这两天paypal出了活动,本次并没有其他的限制,只要注册国区的paypal,使用国内的手机号和62开头的银联卡,就可以获得10美元的代金券,这个代金券购买产品需要大于10.1美元,站长给大家推荐几个方式,可以白嫖一年的VPS,有需要的朋友可以看看比较简单。PayPal送10美元活动:点击直达活动sfz与绑定卡的号码可以重复用 注册的邮箱,手机号与绑的银联卡必须...

无忧云( 9.9元/首月),河南洛阳BGP 2核 2G,大连BGP线路 20G高防 ,

无忧云怎么样?无忧云服务器好不好?无忧云值不值得购买?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,自营有国内雅安高防、洛阳BGP企业线路、香港CN2线路、国外服务器产品等,非常适合需要稳定的线路的用户,如游戏、企业建站业务需求和各种负载较高的项目,同时还有自营的高性能、高配置的BGP线路高防物理...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

glpushmatrix为你推荐
腾讯举报中心怎么通过腾讯反诈骗中心举报QQ匹配函数excel中vlookup函数的用法扫图高清扫图是什么意思,在很多的贴吧里,都有提到一些高清扫图,是自己照杂志上的图片,然后自己再修一下吗自定义表情手机qq添加的自定义表情怎么分组awvawv格式是否等于MP4格式模式识别算法模式识别的简史微信智能机器人有一个人加我微信,他说他自己是图灵机器人,我想问一下这是啥软件怎么可以自动回复微信?移动硬盘文件或目录损坏且无法读取移动硬盘文件或目录损坏且无法读取怎么办??电子邮件软件邮件客户端软件网络备份网络系统备份的主要目的以及网络系统备份体系主要包括哪几方面?
河南vps 浙江vps 高防直连vps 购买域名和空间 idc评测 免费ddos防火墙 丹弗 52测评网 美国十次啦服务器 申请个人网站 有奖调查 赞助 免费mysql数据库 跟踪路由命令 路由跟踪 lamp怎么读 创速 卡巴斯基官网下载 umax accountsuspended 更多