最后,我决定从头开始制作自己的WebGL 3D引擎,我从http://www.khronos.org/webgl/和http://learningwebgl.com以及https://developer.mozilla.org开始教程./ EN/WebGL的
但问题是每个教程使用/推荐不同的库用于Matrix计算,所以我很困惑!
问题是:哪一个非常适合3D WebGL应用程序,图表和游戏?(性能和可用性都很重要)
谢谢
在搜索和阅读Modern OpenGL以升级我现有的项目之后,我有点困惑,因为我的3D框架基于OpenGL 2.1.
所以,据我所知......
我们需要从顶点,索引,法线,颜色,紫外线等生成Vertex-Buffer-Objects.
然后我们可以使用GLM进行矩阵变换,我们只使用VBO来创建或操作网格,最后我们将所有内容传递到GLSL顶点着色器中......
glm::mat4 MVP = projection * view * model;
glUniformMatrix4fv(glGetUniformLocation(shaderProgramID, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP)); //or &MVP[0][0]
// uniform mat4 MVP;
// in vec3 Vertex;
// void main(void)
// {
// gl_Position = MVP * vec4(Vertex, 1.0); //instead of ftransform();
// }
Run Code Online (Sandbox Code Playgroud)问题:我们如何在没有pushMatrix/popMatrix的情况下进行分层转换?(或者我们可以通过使用我们的VBO进行层次转换,是否可能?)
如果不可能,那么如何通过使用GLM和C++ <stack>库来实现与pushMatrix/popMatrix相同的结果?
让我们说我需要这样的东西:
> Set identity
> Translate to X, Y, Z
> Draw Mesh 1
> Rotate 0.5 by X axis
> Draw Mesh 2
> Scale down to 0.1
> Draw …Run Code Online (Sandbox Code Playgroud) 我想将我的科学3D应用程序从Freeglut升级到GLFW,但我担心隐藏的冲突或数据丢失,实际上我的应用程序就像Freeglut的魅力一样,我没有任何问题,但GLFW被推荐用于现代OpenGL( 3.0+)在所有现代书籍和教程中.
我看看GLFW API,它看起来像带有glfw*前缀的Glut ,但我不完全确定.所以我有三个问题:
- 是否值得为GLFW打破我现有的项目,或坚持freeglut?
- 我是否会因过剩而失去任何功能?
- GLFW与GTK +兼容吗?(因为我的GUI基于GTK)
我完成了Learningwebgl.com和Mozilla教程,一开始看起来都不错,但......
不幸的是,我的第一个引擎在制作了大量函数并将脚本分成片段(如core.js,math.js,mesh.js等)之后变慢了,所以我遇到了这个性能问题.
现在在LocalHost上加载页面需要几秒钟(这是非常快),加载纹理和网格也需要几秒钟,Chrome刷新页面几次后冻结,CPU/GPU使用异常,甚至我的'WampServer'崩溃了!
我不是Javascript大师,但是这个东西(webgl)看起来非常敏感并且容易被任何错误分解,我使用Canvas2D制作在线绘画应用程序并且从未遇到过类似的问题.
当我将所有脚本放入单个HTML或JS文件而不是许多小脚本时,我注意到性能要高得多,这可能是问题所在?
注意:我没有使用jQuery或任何其他库.(仅限glMatrix和RequestAnimationFrame脚本)
问题:在重新编写我的引擎之前请给我一些提示,我不想犯同样的错误!
对不起语言
我正在尝试学习C++,感谢这篇文章,我发现C++和Python以及Javascript之间存在许多相似之处:http://www.cse.msu.edu/~cse231/python2Cpp.html
但我根本无法理解C++类,它们看起来像Javascript原型,但并不那么容易.
例如:
//CLxLogMessage defined in header
class myLOG: public CLxLogMessage{
public:
virtual const char * GetFormat (){
return "Wavefront Object";
}
void Error (const std::string &msg){
CLxLogMessage::Error (msg.c_str ());
}
void Info (const std::string &msg){
CLxLogMessage::Info (msg.c_str ());
}
private:
std::string authoringTool;
};
Run Code Online (Sandbox Code Playgroud)
问题:这是什么公共/私人的东西!?
编辑:老实说,我比Python更喜欢C++,因为我可以学习所有内容的真实含义,而不是简单的自动命令,例如我更喜欢单独使用"int X"而不是"X".
谢谢