小编Joh*_*han的帖子

反转y轴,并在OpenGL中设置坐标系

在OpenGL中,我试图反转y轴,并设置一个特定类型的坐标系,就像Allegro一样.假设我的窗口是640x480,我希望屏幕的左上角是轴(0,0),右下角是(640,480).到目前为止,我设法获得了我想要的正确坐标系,但我不知道它是否以正确的方式完成.至于翻转y轴,我无法在不修改我当前拥有的坐标系的情况下将其反转.我不希望只有翻转1个形状的东西.我想让它在保持坐标系的同时翻转我在y轴上制作的所有未来形状.这是我到目前为止所拥有的.

初始化:

const GLdouble XSize = 640, YSize = 480;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, XSize, YSize, 0, 1, 1000);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)

渲染:

float size = 30;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0, 0, -500);

glPushMatrix();
glTranslatef(size, size, 0.0f);

glBegin(GL_TRIANGLES);
glColor3f(0.1, 0.3, 0.8);
glVertex3f( 0.0f, size, 0.0f);
glVertex3f(-size,-size, 0.0f);
glVertex3f( size,-size, 0.0f);
glEnd();
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

编辑:

我想出了添加glScalef(1,-1,1); 将翻转我的形状,但我必须将它包含在我的形状的glPushMatrix()中,我不知道这是否是正确的方法,或者它是一个hackish解决方案.

c++ opengl coordinates

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

删除Glut/FreeGlut/GLFW的控制台窗口?

在Visual C++下,我玩过Glut/FreeGlut/GLFW.似乎这些项目的每个人都默认添加了一个CMD窗口.我尝试将其移除:

属性 - > C/C++ - >预处理器 - >预处理器定义

从这里,我删除_CONSOLE并将其替换为_WINDOWS

然后我去了:

属性 - >连接器 - >系统 - >子系统

我将选项设置为Windows(/ SUBSYSTEM:WINDOWS)

然后当我尝试在GLFW下编译时,我得到以下构建错误:

  • 错误1错误LNK2001:未解析的外部符号_WinMain @ 16 MSVCRT.lib

  • 错误2致命错误LNK1120:1未解析的外部glfwWindow.exe

是否可以删除控制台窗口?

c++ configuration glut freeglut glfw

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

Eclipse C++内容辅助,自动激活

我在Eclipse中注意到内容辅助插入后插入 - >或.要么 ::

我真的很喜欢这个功能,但是我希望它能在每2-3个字符输入后更加灵活并自动激活.Code :: Blocks就是一个例子.它允许您在键入一定数量的字符后自动激活内容辅助.另一个例子是在Visual Studio中使用Visual Assist X"Whole Tomato".

有可能以某种方式为Eclipse启用它吗?

c++ eclipse ide intellisense

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

在2D数组中查找最大的矩形

我需要一个算法,它可以解析2D数组并返回最大的连续矩形.作为参考,请看我演示我的问题的图像.

在此输入图像描述

c++ arrays parsing

6
推荐指数
2
解决办法
5927
查看次数

哪个OpenGL版本最稳定并且目前使用?

我一直在考虑为我的项目制作一个额外的包装器来使用OpenGL而不是Allegro.我不确定要使用哪个OpenGL版本,因为我知道有些计算机无法运行最新版本,例如v4.4.另外,我需要一个在Linux,Windows,Mac上没有编译问题的版本.

c++ opengl

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

用于游戏循环的Java TimerTick事件

我尝试使用java.util.Timer中的Timer在Java中创建游戏循环.在计时器滴答声期间,我无法让我的游戏循环执行.以下是此问题的示例.我试图在游戏循环期间移动按钮,但它没有继续计时器滴答事件.

import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JButton;

public class Window extends JFrame {

    private static final long serialVersionUID = -2545695383117923190L;
    private static Timer timer;
    private static JButton button;

    public Window(int x, int y, int width, int height, String title) {

        this.setSize(width, height);
        this.setLocation(x, y);
        this.setTitle(title);
        this.setLayout(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

        timer = new Timer();
        timer.schedule(new TimerTick(), 35);

        button = new JButton("Button");
        button.setVisible(true);
        button.setLocation(50, 50);
        button.setSize(120, 35);
        this.add(button);
    }

    public void gameLoop() {

        // Button does not move on timer tick. …
Run Code Online (Sandbox Code Playgroud)

java swing timer game-loop

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

如何使用OpenGL 2.0而不是更高版本?

目标是制作一款兼容许多显卡和跨平台的游戏.我决定使用OpenGL 2.0和Glut.

然而,我很快意识到,版本OpenGL版本1.0,2.0,2.1没有特定的DLL ...这让我想知道,你究竟如何选择你需要的OpenGL版本?

另外,我知道Windows Visual Studio只附带OpenGL 1.1版.这就是为什么我决定使用Glut,以便我可以使用更高版本的OpenGL中的函数,例如2.0.

问题仍然存在,我如何使用某个版本的OpenGL?

c++ opengl

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

对于这种类型的二进制IO操作,Endianness会出现问题吗?

为了提高空间效率,我决定使用二进制文件对保存文件进行编码.每个字节代表一个瓦片类型的id.这会导致不同的Endian计算出现问题吗?

另外,出于好奇,是设置Endian类型的CPU还是操作系统?

附加信息:我正在使用C++并构建一个x平台游戏.我不想使用其他API,如Boost.

c++ file save endianness

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

我应该担心Big Endian还是只是一个微不足道的方面?

有很多使用Big Endian的电脑吗?我刚刚在5台不同的计算机上测试过,每台计算机都是在不同的年份购买的 每个人都使用Little Endian.Big Endian现在还在使用,还是适用于摩托罗拉6800等老式处理器?

编辑:

谢谢TreyA,intel.com/ design/intarch/papers/endian.pdf 是一篇非常好用的文章.它涵盖了下面的每个答案,并且还对它们进行了扩展.

c++ endianness processors

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

这种浮子的最大尺寸是多少?

在C++中,在32位操作系统下使用浮点变量,给定额外的小数精度,是否可以从浮点数中获得最大实数?示例:1000.2

c++ floating-point

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