什么是“即时模式”? 给出一个代码示例。 我什么时候必须使用即时模式而不是保留模式? 什么是使用每种方法的优点和缺点?
我在Linux上使用freeglut编写了一些C ++(g ++)的效果,我用它们进行编译 g++ -Wall -lglut part8.cpp -o part8 所以我想知道是否有可能有g ++使静态编译的Windows可执行文件包含所需的一切? 我没有Windows,所以这将是非常酷的,如果我能在Linux上做到这一点:)
用glm设置ViewMatrix很容易: glm::lookAt(Position, Direction, UpVector); 但如果我尝试使用modelMatrix函数,我会得到comfusing值(模型不在正确的位置,也旋转看起来不正确)。 我只是想设置一个对象相同的方式设置相机。 我可以使用lookat funktion并在之后做一些更改吗? 或者我必须为此编写自己的function? 如果是的话,怎么样? 我用这个固定了位置: m_Orientation = glm::lookAtLH(Position, Direction, UpVector); m_Orientation[3][0] = -m_Orientation[3][0]; m_Orientation[3][1] = -m_Orientation[3][1]; m_Orientation[3][2] = -m_Orientation[3][2]; 也在vertexshader里面我使用这个: gl_Position = CameraMatrix * ModelMatrix * Pos; 其中CameraMatrix是一个viewProjectionMatrix,ModelMatrix(我的问题)和Pos是我的顶点在模型空间的位置
我试图在我的opengl应用程序中实现正常的映射,但我无法得到它的工作。 这是漫reflection地图(我添加了一个棕色), 这是正常的地图。 为了得到切线和苦行(在其他地方叫binormals?)向量,我运行这个函数为我的网格中的每个三angular形: void getTangent(const glm::vec3 &v0, const glm::vec3 &v1, const glm::vec3 &v2, const glm::vec2 &uv0, const glm::vec2 &uv1, const glm::vec2 &uv2, std::vector<glm::vec3> &vTangents, std::vector<glm::vec3> &vBiangents) { // Edges of the triangle : postion delta glm::vec3 deltaPos1 = v1-v0; glm::vec3 deltaPos2 = v2-v0; // UV delta glm::vec2 deltaUV1 = uv1-uv0; glm::vec2 deltaUV2 = uv2-uv0; […]
我知道如何编写OpenGL / DirectX程序,并且我知道背后的math和概念性的东西,但是我很好奇GPU-CPU通信是如何在低级别上工作的。 假设我有一个用C语言编写的OpenGL程序,它显示一个三angular形并将摄像头旋转45度。 当我编译这个程序的时候,它会变成一系列的ioctl调用,然后GPU驱动程序将相应的命令发送到GPU,在那里旋转三angular形和设置合适的颜色的适当的像素的所有逻辑是有线在? 或者将程序编译成一个加载到GPU上的“gpu程序”并计算旋转等。 或者完全不同的东西? 编辑 :几天后,我发现这个文章系列,基本上回答了这个问题: http : //fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part- 1 /
我正在试图将我采样的一组向量旋转到三angular形的法线上 如果这是正确的,随机抽样的半球将与三angular形alignment。 目前我在Z轴上生成它,并试图将所有样本旋转到三angular形的法线。 但它似乎是“刚刚closures” glm::quat getQuat(glm::vec3 v1, glm::vec3 v2) { glm::quat myQuat; float dot = glm::dot(v1, v2); if (dot != 1) { glm::vec3 aa = glm::normalize(glm::cross(v1, v2)); float w = sqrt(glm::length(v1)*glm::length(v1) * glm::length(v2)*glm::length(v2)) + dot; myQuat.x = aa.x; myQuat.y = aa.y; myQuat.z = aa.z; myQuat.w = w; } return myQuat; } 我从这个页面底部拉出来的: http : //lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors […]
我阅读了大量有关使用片段着色器获得深度的信息。 如 http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=234519 但我仍然不知道gl_FragCoord.z是否是线性的。 GLSL规范说,它的范围是[0,1]屏幕sapce没有提到它是线性的。 我认为线性是至关重要的,因为我将使用渲染模型来匹配Kinect的深度图。 那么如果它不是线性的,如何在世界空间中线性化呢?
渲染上下文通常在背景上有一个纯色(黑色或其他,见下图): 我想知道是否可以设置一个窗口,没有装饰和透明背景,同时允许我呈现OpenGL的东西。 这会让人错觉三angular形在屏幕上浮动。 透明的背景应该允许你看到桌面或者其他可能的应用程序。 你能举例说明源代码吗? 平台:Windows(仅限win32)
我有一些顶点数据。 位置,法线,纹理坐标。 我可能从.obj文件或其他格式加载它。 但是每一个顶点数据都有自己的索引。 我可以使用OpenGL / Direct3D渲染这个网格数据吗?
一直以来阻碍我进行3D编程的一件事就是无法理解math是如何工作的。 我可以用编程stream程中的math方法和函数来处理math,那么对我来说,这一切都是清楚而合乎逻辑的,但是在math符号中,我只是无法从中得出正面和反面的结论。 我一直在阅读网站,一些试图解释这个问题的研究机构的video,但他们都使用math符号,我只是迷失在其中,我的头脑不会把它翻译成可以理解的东西。 我可能有一个缺陷。 另外,仅仅使用别人的代码不是我的兴趣,我想了解它背后的机制,逻辑。 我很乐意使用别人的代码,但我真的想知道它是如何工作的。 这个问题 你可以用简单的术语来解释一下, 没有math符号,只是编程符号/函数/伪代码,如何在所有3个轴上实现matrix变换? 理想情况下,我想要的是写一个方法/对象的材料/理解,我可以定义类似于glRotate的三个轴的angular度来旋转我所拥有的四边形/三angular形的集合。 (我正在尝试编程一个立方体形状的3D旋转,而无需访问OpenGL函数来完成这个工作,因为每当显示列表发生变化时,都会在一次绘制调用中完成)。 我做了什么? 我试图做出一个90度的转换函数来获得math的诀窍,但却完全没有做出一个理论上应该是最简单的适当的matrix。 你可以在http://jsfiddle.net/bLfg0tj8/5/上看到我失败的尝试 Vec3 = function(x,y,z) { this.x = x; this.y = y; this.z = z; } Matrix = function Matrix() { this.matrixPoints = new Array(); this.rotationPoint = new Vec3(0,0,0); this.rotationAngle = 90; } Matrix.prototype.addVector = function(vector) { this.matrixPoints.push(vector); } Matrix.prototype.setRotationPoint = function(vector) { […]