标签: opengl-compat

不了解 gluOrtho2D 函数

我无法执行什么gluOrtho2D()功能?它是将原点固定在 OpenGL 窗口上的某个特定点还是其他地方?

这是因为gluOrtho2D(1,1,1,1)将原点固定在窗口的中间。

如果它在某个时候没有修复原点,那么有什么方法可以修复原点,因为我已经读到没有这样的东西叫做“OpenGL 窗口坐标”?

我读到gluOrtho2D(0,640,480,0)修复了窗口左上角的原点,但是如果其他值作为参数发送,我怎么知道它在哪里移动?

opengl orthographic opengl-compat

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

在Python中没有可见窗口的OpenGL渲染视图

我需要渲染一些场景.我设法使用pyopengl和pygame在python中完成它.问题是它会在短时间内创建一个窗口.

我想渲染相同的图像并保存它,而不创建一个可见的窗口(或者可能根本没有创建一个窗口,甚至没有pygame).

import cv2
import numpy as np
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *

def main():
    DISPLAY_WIDTH = 900
    DISPLAY_HEIGHT = 900

    pygame.init()
    pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT), DOUBLEBUF | OPENGL)
    gluPerspective(90, (DISPLAY_WIDTH / DISPLAY_HEIGHT), 0.01, 12)

    glEnable(GL_TEXTURE_2D)
    glEnable(GL_DEPTH_TEST)
    glDepthFunc(GL_LEQUAL)

    glRotatef(-90, 1, 0, 0) # Straight rotation
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glRotatef(285, 0, 0, 1) # Rotate yaw
    glTranslatef(-5, -3, -2) # Move to position

    # Draw rectangle
    glBegin(GL_QUADS)
    glColor3f(1, 0, 0)
    glVertex3f(2, 2, 0)
    glVertex3f(2, …
Run Code Online (Sandbox Code Playgroud)

python opengl pygame pyopengl opengl-compat

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

用鼠标在OpenGL GLUT中绘制多边形

我想用鼠标交互在openGL Glut中绘制一个多边形,每次左键单击都将是一个顶点,并且将在每个顶点之间绘制一条线。单击鼠标右键时,多边形将关闭,从最后一个顶点到第一个顶点绘制一条线。我想出了这个,但它似乎不起作用。

void draw_polygon(int button, int state, int x, int y) {

    bool right_pushed = 0;
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);

    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
        p1.x = x;
        p1.y = 480 - y;

        //if right is clicked draw a line to here
        first.x = x;
        first.y = 480 - y;
    }

    while (right_pushed == false) {

        if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) {
            p2.x = x;
            p2.y = 480 - y;
        }

        GLfloat dx = p2.x …
Run Code Online (Sandbox Code Playgroud)

c++ opengl graphics glut opengl-compat

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

OpenGL重叠式丑陋渲染

我正在尝试使用OpenGL 2.1渲染场景,但是重叠形状上的边框很奇怪。我测试了一些OpenGL初始化,但是没有任何变化。我将问题简化为一个2球的简单测试应用程序,结果相同。

我尝试了有关Gl_DEPTH_TEST的几件事,启用/禁用平滑操作均未成功。

这是我用2 gluSphere的结果:

在此处输入图片说明

当一条线足以分隔蓝色和红色面时,我们可以看到某种混叠...

我使用SharpGL,但我认为它并不重要(因为我仅将其用作OpenGL包装器)。这是我渲染最简单的代码(可以将其复制到Form中进行测试):

OpenGL gl;
IntPtr hdc;
int cpt;

private void Init()
{
    cpt = 0;
    hdc = this.Handle;

    gl = new OpenGL();
    gl.Create(SharpGL.Version.OpenGLVersion.OpenGL2_1, RenderContextType.NativeWindow, 500, 500, 32, hdc);

    gl.Enable(OpenGL.GL_DEPTH_TEST);
    gl.DepthFunc(OpenGL.GL_LEQUAL);

    gl.ClearColor(1.0F, 1.0F, 1.0F, 0);
    gl.ClearDepth(1);

    gl.MatrixMode(OpenGL.GL_PROJECTION);
    gl.Perspective(30, 1, 0.1F, 1.0E+7F);

    gl.MatrixMode(OpenGL.GL_MODELVIEW);
    gl.LookAt(0, 3000, 0, 0, 0, 0, 0, 0, 1);
}

private void Render(int angle)
{
    gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT);

    RenderSphere(gl, 0, 0, 0, 0, 300, Color.Red);
    RenderSphere(gl, 0, 0, 100, angle, …
Run Code Online (Sandbox Code Playgroud)

opengl opengl-compat

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

如何在 PyOpenGL 上创建一个可以对鼠标移动进行“透视旋转”的相机?

我正在创建一个第一人称视角 RPG,我想在移动鼠标时在 PyOpenGL 中旋转相机(就像其他一些游戏,如 Minecraft)。我可以使用什么功能来做到这一点以及如何做到这一点?

我尝试使用gluLookAt()但我不明白它是如何工作的,尽管我经历了不同的来源。我什至不知道它是否有帮助。

import sys,pygame
from OpenGL.GL import *
from OpenGL.GLU import *
cmddown = False
#...
keypress = pygame.key.get_pressed()#Move using WASD
    if keypress[pygame.K_w]:
        glTranslatef(0,0,0.1)
    if keypress[pygame.K_s]:
        glTranslatef(0,0,-0.1)
    if keypress[pygame.K_d]:
        glTranslatef(-0.1,0,0)
    if keypress[pygame.K_a]:
        glTranslatef(0.1,0,0)
    mouse_movement = pygame.mouse.get_rel()#Get mouse event
    #This is where the "look around" should be happen
    pygame.display.flip()
Run Code Online (Sandbox Code Playgroud)

python opengl pygame pyopengl opengl-compat

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

如何在 PyOpenGL 中将 png 图像作为图像叠加层进行 blit?

我正在 PyOpenGL 中制作游戏,并希望将一些图像作为一些叠加(例如,暂停按钮)显示在屏幕上。我怎样才能做到这一点?

我试过使用glBitmap(),但它不起作用。

这就是我所拥有的:

pauseimg = pygame.image.load(path + "pause.png").convert_alpha()
def blit_image(x,y,w,h,img,r,g,b):
    glColor3f(r,g,b)
    glWindowPos2f(x,y)
    glBitmap(w,h,0,0,0,0,img)
blit_image(300,300,313,115,pauseimg,1,1,1)
Run Code Online (Sandbox Code Playgroud)

我预计它会 blit 图像,但它抛出了一个异常:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/OpenGL/latebind.py", line 41, in __call__
    return self._finalCall( *args, **named )
TypeError: 'NoneType' object is not callable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".py", line 438, in <module>
    blit_image(300,300,313,115,pauseimg,1,1,1)
  File ".py", line 135, in blit_image
    glBitmap(w,h,0,0,0,0,img)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/OpenGL/latebind.py", line 45, in __call__
    return self._finalCall( *args, …
Run Code Online (Sandbox Code Playgroud)

python opengl pygame pyopengl opengl-compat

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

旋转前后的 OpenGL 平移

以下是关于如何绘制机器人的手臂和肩膀并通过一些用户输入旋转它们的代码(取自http://www.glprogramming.com/red/chapter03.html):

glPushMatrix();
    glTranslatef (-1.0, 0.0, 0.0);
    glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();

    glTranslatef (1.0, 0.0, 0.0);
    glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0);
    glTranslatef (1.0, 0.0, 0.0);
    glPushMatrix();
        glScalef (2.0, 0.4, 1.0);
        glutWireCube (1.0);
    glPopMatrix();
glPopMatrix();  

glutSwapBuffers();
Run Code Online (Sandbox Code Playgroud)

我了解绘制肩部并旋转它的代码。对于肩部:首先我们将它沿 x 轴向后平移一个单位,这样当我们进行旋转时,它会作为枢轴沿原点旋转。然后我们将其向后平移(在 x 轴上向前移动一个单位)。此转换将应用于已缩放的立方体。

现在,我的问题是肘部。为什么在旋转之前和之后在 x 轴上都有向前平移?

opengl coordinate-transformation opengl-compat

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

在 C++ 中用 OpenGl 画一条粗线

我想在 C++ 中使用 OpenGL 库创建一条粗线,但它不起作用。我试过这个代码:

glBegin(GL_LINES);
glLineWidth(3);
glVertex2f(-0.7f, -1.0f);
glVertex2f(-0.7f, 1.0f);
glEnd();
Run Code Online (Sandbox Code Playgroud)

这里有什么问题吗?

c++ opengl line opengl-compat

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

按纵横比拉伸的 OpenGL 2D 投影

我目前正在尝试使用 JOGL 将 2D java 游戏的绘图方法转换为 OpenGL,因为本机 java 对于快速连续绘制高分辨率图像似乎相当慢。现在我想使用 16:9 的宽高比,但问题是我的图像被拉伸到两侧。目前我只绘制一个白色旋转四边形来测试这一点:

public void resize(GLAutoDrawable d, int width, int height) {

    GL2 gl = d.getGL().getGL2(); // get the OpenGL 2 graphics context
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL2.GL_PROJECTION);
    gl.glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);

}

public void display(GLAutoDrawable d) {

    GL2 gl = d.getGL().getGL2();  // get the OpenGL 2 graphics context
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);

    gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glColor3f(1.0f,1.0f,1.0f);

    degree += 0.1f;

    gl.glRotatef(degree, 0.0f, 0.0f, 1.0f);

    gl.glBegin(GL2.GL_QUADS);
    gl.glVertex2f(-0.25f, 0.25f);
    gl.glVertex2f(0.25f, 0.25f);
    gl.glVertex2f(0.25f, …
Run Code Online (Sandbox Code Playgroud)

java opengl jogl orthographic opengl-compat

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

如何绘制单个3D点?

我将Python 3与PyOpenGL结合使用,我需要在空间中绘制单个点。我知道一个点没有体积,但是我不知道是否有一种简单的方法可以在某些坐标处绘制点/球。编辑:我在pygame和tkinter gui内使用opengl

我尝试了以下代码:

glEnable(GL_POINT_SMOOTH)
glBegin(GL_POINTS)
glColor3d(1, 1, 1)
glPointSize(200)
glVertex3d(1, 1, 1)
glEnd() # This throws an error
Run Code Online (Sandbox Code Playgroud)

错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Program Files (x86)\Python37-32\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:/Users/reas/Desktop/Programación/Dibujo/Dibujo.py", line 65, in vista_alzado
    glEnd()
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\latebind.py", line 61, in __call__
    return self.wrapperFunction( self.baseFunction, *args, **named )
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\GL\exceptional.py", line 45, in glEnd
    return baseFunction( )
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\OpenGL\platform\baseplatform.py", line 409, in __call__
    return …
Run Code Online (Sandbox Code Playgroud)

python opengl pyopengl python-3.x opengl-compat

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