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

IntoVPS:按小时计费KVM月费5美元起($0.0075/小时),6个机房可选

IntoVPS是成立于2004年的Hosterion SRL旗下于2009年推出的无管理型VPS主机品牌,商家提供基于OpenStack构建的VPS产品,支持小时计费是他的一大特色,VPS可选数据中心包括美国弗里蒙特、达拉斯、英国伦敦、荷兰和罗马尼亚等6个地区机房。商家VPS主机基于KVM架构,最低每小时0.0075美元起($5/月)。下面列出几款VPS主机配置信息。CPU:1core内存:2GB...

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

Linode($5/月),新用户注册送100美元,11个数据中心云服务器

关于Linode,这是一家运营超过18年的VPS云主机商家,产品支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,最低每月费用5美元($0.0075/小时)起。目前,注册Linode的新用户添加付款方式后可以获得100美元赠送,有效期为60天,让更多新朋友可以体验Linode的产品和服务。Linode的云主机产品分为几类,下面分别列出几款套餐配置...

glpushmatrix为你推荐
cpu监控win10自带cpu温度监控水晶易表水晶报表是什么?主要有什么用处?qq博客怎么开QQ博客啊遗传算法实例如何用C语言实现遗传算法的实际应用?什么是生态系统生态系统的基础是什么?超级播放器那种电影网站就是那种不需要下载播放器可以直接看移动硬盘文件或目录损坏且无法读取双击移动硬盘提示文件或目录损坏且无法读取怎么回事?监控插件常见的监控软件有哪些什么是网络地址什么是IP地址啊?embed函数C语言中push函数的定义以及用法。
idc评测 联通c套餐 踢楼 arvixe asp.net主机 suspended 抢票工具 正版win8.1升级win10 天猫双十一秒杀 北京主机 云全民 idc是什么 国外代理服务器软件 免费dns解析 台湾谷歌 上海联通宽带测速 ca187 阿里云官方网站 主机管理系统 服务器论坛 更多