小编apo*_*iat的帖子

OpenGL拉伸形状 - 宽高比

我的openGL视图大小为(比方说)800(宽度)x600(高度).然后我得到了一个二维对象:

0.0 , 0.0
0.1 , 0.0
0.1 , 0.1
0.0 , 0.1
Run Code Online (Sandbox Code Playgroud)

这个,正如你所理解的那样应该是一个正方形(基于类比).但是在我的openGL视图中打印出这个拉伸.现在,我理解为什么会这样.它基本上是因为我正在使用-1,1的默认矩阵.由于我800x600的分辨率没有1的宽高比,我的形状变得紧张.

现在我对如何解决这个问题更感兴趣.我已经阅读过像glFrustum,glOrtho,glViewPort这样的函数,它们正在投影矩阵上发生,可以解决这些问题.事实是,我不确定使用它们.我基本上想要的是在制作正方形时保持上述坐标,并且在我的视图上实际上是一个正方形.

什么是解决这个问题的正确方法?

opengl 2d aspect-ratio

10
推荐指数
1
解决办法
1万
查看次数

在没有Interface Builder的情况下创建OpenGL视图

所以我试图创建一个openGL视图(在我的窗口中).我正在制作一个Cocoa应用程序.我设法通过Interface Builder创建一个,但出于教育目的,我想继续创建一个没有它.就在论文上.

这就是我告诉你即时挣扎的观点.所以到目前为止我基本上已经完成了尝试:我创建了一个继承自NSOpenGLView的新类"MyOpenGLView.h/m".我没有添加私有变量或方法只是类名.我唯一做的是覆盖initWithFrame :(在其中添加一个self = [super initWithFrame:pixelFormat:].)我在Web上读到它,你必须首先用这样的东西实例化它然后才能使用它) .这是代码:

- (id) initWithFrame:(NSRect)frameRect
{
 NSOpenGLPixelFormat *pixelFormat = [[NSOpenGLPixelFormat alloc]
                                    initWithAttributes:(NSOpenGLPixelFormatAttribute[])
                                    {
                                    NSOpenGLPFAWindow,
                                    NSOpenGLPFADoubleBuffer,
                                    NSOpenGLPFADepthSize, 32,
                                    nil
                                    }];
 self = [super initWithFrame:frameRect pixelFormat:pixelFormat];
 [[self openGLContext] makeCurrentContext];
}
Run Code Online (Sandbox Code Playgroud)

所以我有另一个名为"MyViewController.h/m"的类来处理我的View?我有我的MyOpenGLView*myView.在.m文件中,我使用以下内容:

myView = [[MyOpenGLView alloc] initWithFrame:CGRectMake(0,0,100.0,100.0)];
if (!myView) { NSLog(@"ERROR"); }
Run Code Online (Sandbox Code Playgroud)

当然,我得到错误.

我的窗口应用程序中没有移植的openGL视图.我猜它有关于被调用的方法的层次结构,但后来再次..我不确定.你可以帮我吗?

opengl macos cocoa objective-c nsopenglview

5
推荐指数
1
解决办法
4984
查看次数

使用不同的计算机渲染问题

所以我正在做一个塔防游戏.我与他们共享了一个构建,因此我可以检查一切是否在其他主机上执行.

而实际发生的事情是,虽然一切都完美地呈现在我的身边(在我的mac/xcode + windows/visual studio 2012上),在我朋友的一边,似乎几何图形混乱了.我的屏幕上的每个对象都由VBO表示,我每次都会使用它来渲染到不同的位置.但似乎我的VBO具有从所有模型导入的所有几何体.(因此塔边有树.)

这是结果:

在此输入图像描述(我的电脑)在此输入图像描述(我朋友的电脑)

到目前为止,我已经设法将此问题调试到某一点.我可以告诉它不是我导入我的模型的方式,因为我在创建一个带有所有向量的debug.txt文件,然后我将它们作为VBO发送到gpu,在两台计算机上它们输出相同的值.所以我的矢量不会被内存问题或其他任何东西弄乱.所以我想也许这就是我设置或渲染我的VBO的方式

最令我印象深刻的是,为什么我的电脑上的东西不在朋友的电脑上.我知道的一个区别是我的电脑是一个开发者工作站(无论这意味着什么),而我朋友的电脑却没有.

这是我的VBO加载函数和我的VBO绘图函数:我使用glfw创建我的窗口和上下文,并包含glew标头以启用一些较新的opengl函数.

void               G4::Renderer::LoadObject(
                                           G4::TILE_TYPES   aType,
                                           std::vector<float> &v_data,
                                           std::vector<float> &n_data,
                                           std::vector<float> &t_data,
                                           float scale,
                                           bool has_texture,
                                           unsigned int texture_id
                                           )
{

    unsigned int vertices_id, vertices_size, normals_id, texturecoordinates_id;

    vertices_size   = static_cast<unsigned int>(v_data.size());

    glGenBuffers(1, &vertices_id);
    glGenBuffers(1, &normals_id);

    //::->Vertex array buffer upload.
    glBindBuffer(GL_ARRAY_BUFFER, vertices_id);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*v_data.size(), &v_data.front(), GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    //::->Normal Array buffer upload.
    glBindBuffer(GL_ARRAY_BUFFER, normals_id);
    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*n_data.size(), &n_data.front(), GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);



    if (has_texture)
    {
        glGenBuffers(1, &texturecoordinates_id);

        glBindBuffer(GL_ARRAY_BUFFER, texturecoordinates_id);
        glBufferData(GL_ARRAY_BUFFER, sizeof(float)*t_data.size(), &(t_data[0]), GL_STATIC_DRAW); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

1
推荐指数
1
解决办法
1409
查看次数

标签 统计

opengl ×3

2d ×1

aspect-ratio ×1

c++ ×1

cocoa ×1

macos ×1

nsopenglview ×1

objective-c ×1