在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解决方案.
在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
是否可以删除控制台窗口?
我在Eclipse中注意到内容辅助插入后插入 - >或.要么 ::
我真的很喜欢这个功能,但是我希望它能在每2-3个字符输入后更加灵活并自动激活.Code :: Blocks就是一个例子.它允许您在键入一定数量的字符后自动激活内容辅助.另一个例子是在Visual Studio中使用Visual Assist X"Whole Tomato".
有可能以某种方式为Eclipse启用它吗?
我需要一个算法,它可以解析2D数组并返回最大的连续矩形.作为参考,请看我演示我的问题的图像.

我一直在考虑为我的项目制作一个额外的包装器来使用OpenGL而不是Allegro.我不确定要使用哪个OpenGL版本,因为我知道有些计算机无法运行最新版本,例如v4.4.另外,我需要一个在Linux,Windows,Mac上没有编译问题的版本.
我尝试使用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) 目标是制作一款兼容许多显卡和跨平台的游戏.我决定使用OpenGL 2.0和Glut.
然而,我很快意识到,版本OpenGL版本1.0,2.0,2.1没有特定的DLL ...这让我想知道,你究竟如何选择你需要的OpenGL版本?
另外,我知道Windows Visual Studio只附带OpenGL 1.1版.这就是为什么我决定使用Glut,以便我可以使用更高版本的OpenGL中的函数,例如2.0.
问题仍然存在,我如何使用某个版本的OpenGL?
为了提高空间效率,我决定使用二进制文件对保存文件进行编码.每个字节代表一个瓦片类型的id.这会导致不同的Endian计算出现问题吗?
另外,出于好奇,是设置Endian类型的CPU还是操作系统?
附加信息:我正在使用C++并构建一个x平台游戏.我不想使用其他API,如Boost.
有很多使用Big Endian的电脑吗?我刚刚在5台不同的计算机上测试过,每台计算机都是在不同的年份购买的 每个人都使用Little Endian.Big Endian现在还在使用,还是适用于摩托罗拉6800等老式处理器?
编辑:
谢谢TreyA,intel.com/ design/intarch/papers/endian.pdf 是一篇非常好用的文章.它涵盖了下面的每个答案,并且还对它们进行了扩展.
在C++中,在32位操作系统下使用浮点变量,给定额外的小数精度,是否可以从浮点数中获得最大实数?示例:1000.2
c++ ×9
opengl ×3
endianness ×2
arrays ×1
coordinates ×1
eclipse ×1
file ×1
freeglut ×1
game-loop ×1
glfw ×1
glut ×1
ide ×1
intellisense ×1
java ×1
parsing ×1
processors ×1
save ×1
swing ×1
timer ×1