我正在使用OpenGL开发一个小型图形引擎,我的翻译矩阵存在一些问题.我正在使用OpenGL 3.3,GLSL和C++.情况是这样的:我已经定义了一个我想在屏幕上呈现的小立方体.立方体使用它自己的坐标系,所以我创建了一个模型矩阵来转换立方体.为了让自己更容易一点,我开始只使用一个平移矩阵作为立方体的模型矩阵,经过一些编码后,我设法使一切正常,立方体出现在屏幕上.没有什么特别的,但我的翻译矩阵有一点我发现有点奇怪.
据我所知,翻译矩阵的定义如下:
1, 0, 0, x
0, 1, 0, y
0, 0, 1, z
0, 0, 0, 1
Run Code Online (Sandbox Code Playgroud)
但是,这对我不起作用.当我以这种方式定义翻译矩阵时,屏幕上不会显示任何内容.它只在我定义我的翻译矩阵时才有效:
1, 0, 0, 0
0, 1, 0, 0
0, 0, 1, 0
x, y, z, 1
Run Code Online (Sandbox Code Playgroud)
现在我已经多次查看我的代码了解为什么会出现这种情况,但我似乎无法找出原因,或者我只是错了,是否需要像上面的转置矩阵那样定义转换矩阵?
我的矩阵定义为从左到右,从上到下的一维数组.
以下是我的一些代码可能会有所帮助:
//this is called just before cube is being rendered
void DisplayObject::updateMatrices()
{
modelMatrix = identityMatrix();
modelMatrix = modelMatrix * translateMatrix( xPos, yPos, zPos );
/* update modelview-projection matrix */
mvpMatrix = modelMatrix * (*projMatrix);
}
//this creates my translation matrix which …Run Code Online (Sandbox Code Playgroud) 我想以递归方式解析字符串并将结果存储在一个结构中.我编写了一个可以处理一次迭代的解析器.输入格式如下:
v 1.5 2.0 2.5
v 3.0 3.5 4.0
f 1 2 3
f 4 5 6
v 4.5 5.0 5.5
v 6.0 6.5 7.0
f 7 8 9
f 10 11 12
Run Code Online (Sandbox Code Playgroud)
问题是它只解析前4行,它在第三行遇到'v'时停止.完整的代码如下.如何修改此代码,以便将其余输入解析为同一个结构?我已经尝试将启动规则修改start = vertex >> elements为start = *(vertex >> elements),但这只会产生巨大的编译错误.同样如此start = +(vertex >> elements).有什么想法我应该如何修改规则?
#include <iostream>
#include <sstream>
#include <fstream>
#include "boost/spirit/include/qi.hpp"
#include "boost/spirit/include/support_iso8859_1.hpp"
#include "boost/fusion/include/adapt_struct.hpp"
struct ElemParseData
{
std::vector<float> verts;
std::vector<unsigned int> idx;
};
BOOST_FUSION_ADAPT_STRUCT(
ElemParseData,
(std::vector<float>, verts)
(std::vector<unsigned int>, idx) …Run Code Online (Sandbox Code Playgroud)