一个关于openGL es的顶点坐标问题。

tanxj 2010-10-06 01:21:12
设定一个透视投影:
m_screenSize = ivec2(320,480);
float h = m_screenSize.y / m_screenSize.x;
mat4 projection = mat4::Frustum(-1 , 1 , -h , h, 4, 15);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projection.Pointer());

假设我有一个顶点 (3,0,-12),

那我可以通过一个怎样的算法, 得到这个顶点在屏幕上显示的二维坐标位置p2(?,?),
...全文
227 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cbzjzsb123 2011-10-09
  • 打赏
  • 举报
回复
m_screenSize = ivec2(320,480);
float h = m_screenSize.y / m_screenSize.x;
mat4 projection = mat4::Frustum(-1 , 1 , -h , h, 4, 15);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projection.Pointer());
cbzjzsb123 2011-10-09
  • 打赏
  • 举报
回复
[code=C/C++][/m_screenSize = ivec2(320,480);
float h = m_screenSize.y / m_screenSize.x;
mat4 projection = mat4::Frustum(-1 , 1 , -h , h, 4, 15);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projection.Pointer());]
cbzjzsb123 2011-10-09
  • 打赏
  • 举报
回复
我日,我的代码怎么帖不好啊?
m_screenSize = ivec2(320,480);
float h = m_screenSize.y / m_screenSize.x;
mat4 projection = mat4::Frustum(-1 , 1 , -h , h, 4, 15);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projection.Pointer());
ryfdizuo 2011-10-09
  • 打赏
  • 举报
回复
lz啊,这个问题是opengl的最本原问题,具体见:http://blog.csdn.net/dizuo/article/details/4971662
iamnobody 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ri_aje 的回复:]
有一个函数叫 gluProject,可以从模型坐标计算屏幕坐标,楼主 google 一下用法就行了。如果楼主不喜欢用 或者由于限制没法用,就只好自己模仿 gluProject 中的数学操作了。这里有个网页 http://www.songho.ca/opengl/gl_transform.html 讲 OpenGL 顶点变换管道的,gluProject 实际上就是把这些操作封装了一下,你自己做也可以……
[/Quote]
早啊
ri_aje 2011-10-09
  • 打赏
  • 举报
回复
有一个函数叫 gluProject,可以从模型坐标计算屏幕坐标,楼主 google 一下用法就行了。如果楼主不喜欢用 或者由于限制没法用,就只好自己模仿 gluProject 中的数学操作了。这里有个网页 http://www.songho.ca/opengl/gl_transform.html 讲 OpenGL 顶点变换管道的,gluProject 实际上就是把这些操作封装了一下,你自己做也可以的。
ahxzb54 2011-10-08
  • 打赏
  • 举报
回复
我也想知道,up
绘制飘动的国旗绘制总结 需求 将国旗图片在OpenGL中绘制出来,再实现飘动效果,最后增加半透明效果。 实现步骤 1. 首先确定使用分割法将整张图片分割成若干份,画在一个网格组成的长方形中 2. 画出N*N格的方格 3. 将国旗图案贴到这个网格中 a) 计算网格各顶点坐标 Vertex b) 计算各顶点对应的纹理坐标 texcoord c) 计算各顶点所对应的顶点法向量 Normal d) 计算出需要绘制的各顶点的顺序 order 4. 绘制飘动效果 a) 根据正弦曲线,计算出各顶点所对应的深度值 zDepth b) 计算出正弦曲线的波动 i. 坐标点的变动 ii. 顶点法向量坐标值的变动 5. 增加灯光效果 6. 增加材质的效果 遇到的问题 1. 确定网格的密度 网格的密度决定了波动的频率大小 2. 写出绘制的递归方法 开始实现时是通过循环绘制出每一个网格的纹理贴图,组合成整个图像,绘制效率较低且浪费资源较多,而且将图像进行旋转操作的时候会变形,不能达到预想的效果,所以开始对其进行整合 3. 计算各定点坐标时是使用三维数组的形式生成的,较简单,但是OpenGL绘制的时候需要的是buffer形式的,生成buffer时需要的是一维数组,java中没有指针,所以需要自己写个方法把三维数组的内容转换到一维数组中,以求出buffer 4. 生成纹理坐标时比较简单,再生成顶点坐标的同时就可以生成,但是实现后遇到问题问题贴图是上下颠倒的,所以需要与顶点对应的纹理坐标需要上下转换一下,虽然感觉比较麻烦,但是还是比较容易实现的 5. 计算各顶点所对应的法向量时遇到很大的麻烦,由于长时间没有接触相关的数学知识,对法向量的概念有点生疏了,后来查找资料对法向量的概念进行复习,我写的生成顶点法向量的方法比较麻烦,写了5个方法来实现顶点法向量的计算,最后还是实现了 6. 各顶点顺序的计算,需要按照纹理贴图的相应顺序将顶点顺序确定出来,我用的最笨的方法得的,计算出2*2网格的定点坐标,根据坐标计算出顶点顺序,然后写出求顶点顺序的递归算法实现了顶点顺序的计算 7. 根据正弦曲线求出各点的深度,这个方法并不难写,但是在实现的时候,由于把顶点的顺序计算的有一点问题,画出来的图形在移动时不是按照正弦曲线的规律,使得波动的规律看起来极不自然,后来把顶点的计算改正后,还是比较美观的 8. 计算波动的时候,只需要将顶点的z轴坐标依次移动就可以了,比较容易实现,对于顶点法向量的移动,同样是后一个向前一个依次移动,但是移动的是x、y、z三个变量,我绘制的正好是两个波长的波动曲线,多以可以把第一个先缓存起来,赋值给最后一个即可,如果不是整波长的波动,可以把最后一列的顶点z值和顶点法向量重新计算,但是会影响一定的效率,所以建议整波长的比较好 9. 增加灯光效果和材质属性 由于之前没有接触过,所以先进行了学习,然后再增加,遇到的问题是写增加灯光效果的时候,由于疏忽,三种光效属性中均写成了对环境光的修改,所以多费了些时间;在对材质属性进行增加的时候,由于对混合渲染不熟悉,尤其是对glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);两个参数所影响的色彩混合效果不明确,所以增加半透明效果的这块是试出来的。 10. 在不贴图的情况下,灯光效果比较明显,但是在贴图后,半透明效果有,但是灯光效果看不出来了,这块还没有解决。
OpenGL ES 3.0 英文版 第1章——OpenGL ES 3.0简介   第1章简单介绍OpenGL ES,概述了OpenGL ES 3.0图形管线,讨论了OpenGL ES 3.0的设计理念和限制,最后介绍了OpenGL ES 3.0中使用的一些约定和类型。   第2章——你好,三角形:一个OpenGL ES 3.0示例   第2章介绍绘制三角形的一个简单OpenGL ES 3.0示例。我们的目的是说明OpenGL ES 3.0程序的样子,向读者介绍一些API概念,并说明如何构建和运行OpenGL ES 3.0示例程序。   第3章——EGL简介   第3章介绍EGL——为OpenGL ES 3.0创建表面和渲染上下文的API。我们说明与原生窗口系统通信、选择配置和创建EGL渲染上下文及表面的方法,传授足够多的EGL知识,你可以了解到启动OpenGL ES 3.0进行渲染所需的所有知识。   第4章——着色器和程序   着色器对象和程序对象是OpenGL ES 3.0中最基本的对象。第4章介绍创建着色器对象、编译着色器和检查编译错误的方法。这一章还说明如何创建程序对象、将着色器对象连接到程序对象以及链接最终程序对象的方法。我们讨论如何查询程序对象的信息以及加载统一变量(uniform)的方法。此外,你将学习有关源着色器和程序二进制代码之间的差别以及它们的使用方法。   第5章——OpenGL ES着色语言   第5章介绍编写着色器所需的着色语言的基础知识。这些着色语言基础知识包括变量和类型、构造器、结构、数组、统一变量、统一变量块(uniform block)和输入/输出变量。该章还描述着色语言的某些更细微的部分,例如精度限定符和不变性。   第6章——顶点属性、顶点数组和缓冲区对象   从第6章开始(到第11章为止),我们将详细介绍管线,教授设置和编程图形管线各个部分的方法。这一旅程从介绍几何形状输入图形管线的方法开始,包含了对顶点属性、顶点数组和缓冲区对象的讨论。   第7章——图元装配和光栅化   在前一章讨论几何形状输入图形管线的方法之后,第7章将讨论几何形状如何装配成图元,介绍OpenGL ES 3.0中所有可用的图元类型,包括点精灵、直线、三角形、三角形条带和三角扇形。此外,我们还说明了在顶点上进行坐标变换的方法,并简单介绍了OpenGL ES 3.0管线的光栅化阶段。   第8章——顶点着色器   我们所介绍的管线的下一部分是顶点着色器。第8章概述了顶点着色器如何融入管线以及OpenGL ES 着色语言中可用于顶点着色器的特殊变量,介绍了多个顶点着色器的示例,包括逐像素照明和蒙皮(skinning)。我们还给出了用顶点着色器实现OpenGL ES 1.0(和1.1)固定功能管线的示例。   第9章——纹理   第9章开始介绍片段着色器,描述OpenGL ES 3.0中所有可用的纹理功能。该章提供了创建纹理、加载纹理数据以及纹理渲染的细节,描述了纹理包装模式、纹理过滤、纹理格式、压缩纹理、采样器对象、不可变纹理、像素解包缓冲区对象和Mip贴图。该章介绍了OpenGL ES 3.0支持的所有纹理类型:2D纹理、立方图、2D纹理数组和3D纹理。   第10章——片段着色器   第9章的重点是如何在片段着色器中使用纹理,第10章介绍编写片段着色器所需知道的其他知识。该章概述了片段着色器和所有可用的特殊内建变量,还演示了用片段着色器实现OpenGL ES 1.1中所有固定功能技术的方法。多重纹理、雾化、Alpha测试和用户裁剪平面的例子都使用片段着色器实现。   第11章——片段操作   第11章讨论可以适用于整个帧缓冲区或者在OpenGL ES 3.0片段管线中执行片段着色器后适用于单个片段的操作。这些操作包括剪裁测试、模板测试、深度测试、多重采样、混合和抖动。本章介绍OpenGL ES 3.0图形管线的最后阶段。   第12章——帧缓冲区对象   第12章讨论使用帧缓冲区对象渲染屏幕外表面。帧缓冲区对象有多种用法,最常见的是渲染到一个纹理。本章提供API帧缓冲区对象部分的完整概述。理解帧缓冲区对象对于实现许多高级特效(如反射、阴影贴图和后处理)至关重要。   第13章——同步对象和栅栏   第13章概述同步对象和栅栏,它们是在OpenGL ES 3.0主机应用和GPU执行中同步的有效图元。我们讨论同步对象和栅栏的使用方法,并以一个示例作为结束。   第14章——OpenGL ES 3.0高级编程   第14章是核心章节,将本书介绍的许多主题串联在一起。我们已经选择了高级渲染技术的一个样本,并展示了实现这些功能的示例。该章包含使用法线贴图的逐像素照明、环境贴图、粒子系统、图像后处理、程序纹理、阴影贴图、地形渲染

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧