我正在为Blender 2.6x制作一个简单的导出器,用于自定义JSON格式(主要用于WebGL),因为我在网上找到的现有版本不适用于Blender 2.6.
我差点搞定了,但还有一个我无法弄清楚的错误.在一个简单的立方体上,其一侧的纹理方向错误.立方体的其余部分纹理正确.
您可以在此处看到问题的图片(左侧的左侧面朝向错误,与右侧的正确立方体相比):
是否存在一些可能导致此行为发生的常见误解或错误?
这是从Blender 2.65导出到我的自定义JSON格式的函数(错误必须在这里,但我找不到它):
def get_json(objects, scene):
""" Currently only supports one scene.
Exports with -Z forward, Y up. """
object_number = -1
scene_data = []
# for every object in the scene
for object in bpy.context.scene.objects:
# if the object is a mesh
if object.type == 'MESH':
object_number += 1
# convert all the mesh's faces to triangles
bpy.ops.object.mode_set(mode='OBJECT')
object.select = True
bpy.context.scene.objects.active = object
# triangulate using new Blender 2.65 Triangulate modifier
bpy.ops.object.modifier_add(type='TRIANGULATE')
object.modifiers["Triangulate"].use_beauty …
Run Code Online (Sandbox Code Playgroud) 我正在尝试新的SDL2测试版和OpenGL3上下文,我遇到了一个奇怪的问题:
如果我在main()函数中运行SDL初始化代码,它工作正常,但我想在separete init_sdl()函数中使用此代码.
如果我将初始化代码放在单独的init_sdl()函数中,并从main()调用此函数,则从不绘制背景颜色,程序开始疯狂地消耗我所有系统的资源.
有人能指出我在一个单独的函数中初始化SDL的工作示例吗?我似乎无法找到一个......也许这是不可能的?我想我依旧记得在SDL 1.2中遇到了类似的问题,但是自从我使用它以来已经有几年了,而且我认为我没有找到解决方案.事实上,这可能是我选择转而使用SFML的原因.
我真的想使用SDL2代替SFML,因为它运行在更多平台上,但是无法将内容分成小功能对我来说是一个交易破坏者.这应该很容易,我错过了一些明显的东西吗?
编辑:
这有效:
#include <iostream>
#include <GL/glew.h>
#include <SDL.h>
#define PROGRAM_NAME "SDL2 OpenGL3 Example"
int main(int argc, char** argv)
{
SDL_Window* sdl2_window = 0;
SDL_GLContext opengl3_context;
SDL_Init(SDL_INIT_VIDEO);
// set the opengl context version
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
// turn on double buffering set the depth buffer to 24 bits
// you may need to change this to 16 or 32 for your system
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
// create the sdl2 window
sdl2_window = …
Run Code Online (Sandbox Code Playgroud) 我想在我的程序中添加第二个sampler2DRect纹理.我正在为第二个纹理使用单独的着色器文件,否则我使用的是用于显示第一个纹理的相同代码.但是,当我尝试显示第二个纹理时,它会显示第一个纹理,而我似乎无法找出原因.我可能做错了一个API调用,或者可能省略了一些重要的东西,但我没有尝试解决问题.
没有报告GL错误,并且gDEBugger没有显示任何可疑信息.
我想问题可能在我的代码中的其他地方,但是这里是我用来尝试绘制第二个纹理的部分(这几乎与用于绘制第一个纹理的代码相同):
Test_World_Pause_Menu::Test_World_Pause_Menu(int resolution_width, int resolution_height)
: _shaders("shaders/pause_menu.vert", "shaders/pause_menu.frag"),
_vao_id( new GLuint[1] ),
_mvp_id( new GLint[1] ),
_pm_tex_id( new GLuint[1] ),
_mvp( glm::ortho(0.0f, (GLfloat)resolution_width, 0.0f, (GLfloat)resolution_height, -1.0f, 1.0f) ),
_pm_vertices_buffer( new GLuint[1] ),
_pm_vertices( new GLfloat[12] ),
_pm_colors_buffer( new GLuint[1] ),
_pm_colors( new GLfloat[16] ),
_pm_tex_coords_buffer( new GLuint[1] ),
_pm_tex_coords( new GLfloat[8] ),
_pm_normals_buffer( new GLuint[1] ),
_pm_normals( new GLfloat[12] )
{
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // set alpha blending mode
// begin pause menu initialization
_pm_image.loadFromFile("resources/levels/test_00/pause_menu/pause_menu.png");
_pm_image.flipVertically();
unsigned int pm_location_x …
Run Code Online (Sandbox Code Playgroud)