- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我将 suzanne 模型从 blender(Monkey head) 导出为 .obj 文件,只有在片段着色器中使用 RGB 值时才能看到它。例如frag_color = vec4( 1.0, 0.0, 0.0, 1.0 );
使模型变成红色。但它看起来就像一个变形的纹理,除非我旋转它
我想使用法线作为颜色,这样我就可以看到脸部的特定细节等。我将法线绑定(bind)到顶点位置 1。
if ( mesh -> HasNormals() )
{
normals = ( GLfloat * ) malloc( * pointCount * 3 * sizeof( GLfloat ) );
for ( int i = 0; i < * pointCount; i++ )
{
const aiVector3D * vn = &( mesh -> mNormals[ i ] );
normals[ i * 3 ] = ( GLfloat ) vn -> x;
normals[ i * 3 + 1 ] = ( GLfloat ) vn -> y;
normals[ i * 3 + 2 ] = ( GLfloat ) vn -> z;
}
GLuint vbo;
glGenBuffers( 1, &vbo );
glBindBuffer( GL_ARRAY_BUFFER, vbo );
glBufferData( GL_ARRAY_BUFFER, 3 * * pointCount * sizeof( GLfloat ), normals, GL_STATIC_DRAW );
glVertexAttribPointer( 1, 3, GL_FLOAT, GL_FALSE, 0, NULL );
glEnableVertexAttribArray( 1 );
free( normals );
}
我在附加着色器之后但在链接之前将 1
绑定(bind)到 vertex_normal
。
glAttachShader( program, vertShader );
glAttachShader( program, fragShader );
glBindAttribLocation( program, 0, "vertex_position" );
glBindAttribLocation( program, 1, "vertex_normal" );
glLinkProgram( program );
这些是我的着色器
vertshader.shader
#version 330
in vec3 vertex_position;
in vec3 vertex_normal;
uniform mat4 proj, view, model;
out vec3 normals;
void main()
{
normals = vertex_normal;
gl_Position = proj * vec4( vec3( view * model * vec4( vertex_position, 1.0 ) ), 1.0 );
}
片段着色器.shader
#version 330
in vec3 normals;
out vec4 fragment_color;
void main()
{
fragment_color = vec4( normals, 1.0 );
}
但这只会输出黑屏。我知道模型正在加载,因为我可以像上面那样把它涂成红色。我尝试将 vertex_normal
直接导入到片段着色器中,但没有用,我还尝试规范化 normals
并且也没有改变效果。
那么如何在片段着色器中使用模型法线作为颜色呢?
最佳答案
好的,我找到了解决方法。显然这是 blender 的错。我想用我的网格导出的内容有一个侧面板,Write normals
没有被选中。感谢 Reto Koradi,我不认为没有法线就可以编写网格。
关于c++ - 使用 assimp 在 OpenGL 中使用法线作为颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24252987/
我尝试加载 gltf 格式的场景。它具有金属和粗糙纹理(未嵌入)。现在我想使用 Assimp 加载具有指定纹理的模型。我使用 GetTexture() 检索纹理,但 aiTextureType 没有粗
我已经从 http://assimp.sourceforge.net/main_downloads.html 下载了 Assimp 项目 Assimp release image assimp zip
assimp 库提供了一种从文件加载 3D .obj 模型的好方法。但是我发现它附带的 assimp_viewer.exe(我使用 3.1.1 版)在导入我的 .obj 文件(42Mb,已经简化)时比
我正在使用 Assimp 将 3D 模型加载到我的程序中。到目前为止,一切都很顺利,除了我遇到了一个似乎没有意义的 Lightwave 对象。当然它在 Lightwave 中渲染得很好,但在 Assi
最近我在做骨骼动画导入,所以我用一些IK技术制作了一个类似Minecraft的3d模型来测试Assimp动画导入。输出格式为 COLLADA(*.dae),我使用的工具是 Blender。在编程方面,
导入网格物体时,我得到了 Material ,但是无法访问纹理的文件名。 .mtl文件显式显示纹理的文件名。在代码中,它的纹理计数为1,但文件名字段显示为空字符串,fullPath输出为“* 0”。在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
过去几天我一直在尝试使用 assimp 加载我的蒙皮 collada 网格,但我遇到了非常困难的时间。目前我只是试图在没有任何变换或动画的情况下以其正常的“姿势”渲染它,但网格变得非常变形。我认为问题
我正在尝试使用 Assimp(Open Asset Import Library)制作骨骼动画。现在我可以成功加载 .dae 模型并用动画渲染它,但在这样做的过程中模型变得困惑。 http://i.i
我刚刚下载了 assimp 3.0 库并使用 cmake 构建了所需的 make 文件,然后编译并构建了库本身,这个过程是成功的(对 StepFile.h 稍作修改), 我的 assimp 头文件夹位
我刚拿到最后一个assimp SDK,做了一个项目,我正确地链接了它(链接没有错误)但是我似乎在Sample项目上遇到了一些麻烦。更具体地说,是 SimpleOpenGL。我将 C++ 与 OpenG
我正在使用 Assimp 加载我的模型和网格,到目前为止它一直运行良好。我正在尝试从从 blender 导出 .obj 文件时生成的 .mtl 文件加载发射贴图。它加载漫反射贴图、法线贴图和镜面反射贴
我目前正在使用 ASSIMP 库将骨骼动画实现到我的 3D OpenGL 游戏引擎中,不幸的是它并没有那么好。我目前面临的问题是,串联的骨骼变换(骨骼之间的父子关系)只有在只有一个父级被变换时才能正确
我已经使用 Assimp 一段时间了,现在我正在尝试加载一个 .obj 文件。它加载完美,但我想在加载后操作面部数据。 基本上我在简单的 cube.obj 文件中有这个(完整文件 - http://p
我正在做一个项目,我使用 ASSIMP 库导入一个化身的 3D 网格,更新它并使用同一个 ASSIMP 库再次导出更新后的场景。为此,作为第一步,我编写了一段代码来导入场景,并且在不做任何更改的情况下
我正在使用 assimp 在我的游戏引擎中导入 3d 模型。出于某种原因,无论我使用什么模型或模型格式,assimp 都不会报告任何纹理。这是为什么? 以下是使用 assimp 的非常简单的设置: c
我正在使用 Assimp 加载 COLLADA 模型,但是 scene->mMeshes[i]->mName.C_Str() 调用为我返回 "" existing mesh index(当然,"" 不
我最近通过 valgrind 对我的游戏引擎进行了内存泄漏测试;它实际上告诉我,在我的 Mesh 类中有大约 7000 个字节被泄露;奇怪的是它告诉我这个: 7,280 bytes in 1 bloc
我在 Windows 上安装了 Assimp 库,并且喜欢这些文件,然后只是复制粘贴 SimpleOpenGL 示例并删除了结构词(其中大部分)以清除我得到的错误。 现在,我没有任何错误,但是每当我尝
我正在使用 Assimp.net 将动画 .dae 文件导入我的 OpenTK 引擎并努力建立可用的分层骨骼结构。 在 tutorial我正在关注,根骨骼或“关节”包含它的子关节列表,以及它们的子关节
我是一名优秀的程序员,十分优秀!