草庐IT

java - 使用Java和OpenGL绘制3D树有哪些方法?

我知道如何使用JOGL或LWJGL连接到OpenGL来绘制基本对象。我想要的是可以为树木生成某种几何形状的东西,类似于SpeedTree的著名之处。显然,我不希望获得与SpeedTree相同的质量。我希望树木看起来不重复。速度不是问题,我预计一次屏幕上不需要超过100棵树。有免费的JavaTreeMap库吗?或者示例代码或演示?我可以移植或学习其他语言的内容吗? 最佳答案 http://arbaro.sourceforge.net/http://www.propro.ru/go/Wshop/povtree/povtree.html非

c++ - 在 3D 中查找 X、Y 和 Z 轴的角度 - OpenGL/C++

我目前正在尝试使用OpenGL(使用SDL)将立方体绘制到我在屏幕中左键单击的位置,然后让它指向我在屏幕中右键单击的位置。我可以使用gluUnproject在我想要的位置成功绘制一个立方体-这意味着我已经知道我的立方体所在的坐标。但是我不知道如何计算使我的立方体指向新位置所需的所有角度。当然我还在用gluUnproject找我右击的坐标,但是我只知道怎么用2D图形绕Z轴旋转。例如,如果我想在2D中围绕Z轴旋转一个四边形(当然,这将是一个自上而下的View,其中Z轴仍然“穿过”屏幕)我会做类似的事情:angle=atan2(mouseCoordsY-quadPosY,mouseCoord

c++ - OpenGL - 二维纹理贴图

我正在尝试将一个简单的纹理(64x64)渲染为一个64x64的四边形。四边形本身正在渲染,但不是纹理。(它正在渲染一个空白的白色64x64四边形。)我正在使用SOIL加载图像。staticGLuintLoadPNG(char*filename){GLuinttexture=SOIL_load_OGL_texture(filename,SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y|SOIL_FLAG_NTSC_SAFE_RGB|SOIL_FLAG_COMPRESS_TO_DXT);if(texture==0)Log("Textu

c++ - 在 OpenGL 中每帧绘制新的全屏图像的最快方法是什么?

每一帧,我的程序都会从​​USB摄像机接收一张新图像。该图像最初位于CPU内存中。OpenGL中将此图像绘制到屏幕上以填满整个屏幕的最快方法是什么?目前,我正在将图像数据上传到纹理,然后渲染全屏四边形。但是,这在我试过的另一台机器上运行得不是很快。 最佳答案 Currently,I'muploadingtheimagedatatoatextureandthenrenderingafullscreenquad.However,thisdoesn'trunveryquicklyonadifferentmachinethattried.A

c++ - 移植我的 C++ 应用程序以在浏览器中运行

有没有一种简单的方法可以将C++OpenGL应用程序移植到浏览器?它已经移植到PC、Mac和iOS。如果有一些相对简单的方法,它可以在计算机浏览器之间移植吗?当然,我必须为不同的平台使用不同的二进制文件。我记得前一段时间听说过一些关于Chrome的沙盒环境,但那会排除其他浏览器。他们(id?)在浏览器中如何处理Quake? 最佳答案 如果您已经将ES2.0用于iOS,您的着色器应该按原样使用WebGL.JavaScript嗨!id软件使用giantplugin用于QuakeLive。 关

c++ - Opengl GL_QUADS 产生错误 0x506

我在OpenGL中有一些代码可以将YUV图像渲染到OpenGL视口(viewport)上。该程序在nvidia卡上运行时没有问题,但在IntelHD3000上运行时会产生错误,遗憾的是它是目标机器。代码中标记了产生错误的位置。着色器程序是//VertexShader#version120voidmain(){gl_TexCoord[0]=gl_MultiTexCoord0;gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;}//fragmentshader#version120uniformsampler2DtexY;uniforms

c++ - 某些 GL 函数的好奇 "void*"参数

对于OpenGL中的某些函数,必须为步长指定一个字节偏移量,例如在glVertexAttribPointer()中。起初我会猜测它会是一个像整数一样的普通数值。但经过检查,我意识到它需要转换为void*(更具体地说是GLvoid*)。我的问题是:void*的预期含义是什么,为什么必须将它用于字节偏移量? 最佳答案 glVertexAttribPointer()是VertexBufferObjects之前的一个旧函数。在VBO之前,您的顶点数据将存储在客户端数组中,您需要在绘制之前将指向数据的指针传递给OpenGL。当VBO出现时,他

c++ - OpenGL - OBJ 中的顶点法线

我想知道如何使用顶点法线来实现闪电效果?目前我所拥有的是我可以将顶点和纹理坐标发送到着色器并使用它们但是对于法线,我不知道如何在着色器程序中使用它们。以下是我目前所拥有的。//vertexshaderlayout(location=0)invec4vert;layout(location=1)invec4color;layout(location=2)invec2texcoord;uniformmat4m_model;uniformmat4m_view;uniformmat4m_proj;voidmain(){gl_Position=m_proj*m_view*m_model*vert

c++ - 计算高度图的法线

我在计算高度图的法线时遇到了一个小问题。它有一个奇怪的行为。在较高点和较低点,法线很好,但在中间,它们似乎是错误的。它们由点光源照亮。未固定的源已删除编辑:尝试了2种新方法:这是按面法线。看起来不错,但你看到的是单人脸。Positionnormal=crossP(vectorize(pOL,pUR),vectorize(pOR,pUL));我也尝试过以这种方式对每个顶点执行此操作,但输出也很奇怪。这是Nico提出的建议:它看起来也很奇怪。也许我计算帮助点的方式有误。未固定的源已删除编辑2:我的观点定义:OL,OR,UL,UR是要绘制的平面的角顶点。postVertPosZ1postVe

c++ - 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str':非标准语法;使用 '&' 创建指向成员的指针

我正在尝试创建一个可以读取和编译opengl顶点和片段着色器文件的函数,但是我收到了这个错误:'std::basic_string,std::allocator>::c_str':non-standardsyntax;use'&'tocreateapointertomember我不太确定如何修复它。这是我的代码:GLuintshader_load(constGLchar*vertex,constGLchar*fragment){std::stringver=file_read_all(vertex);std::stringfrag=file_read_all(fragment);con