我想这是一个数学问题而不是OpenGL问题,但我离题了.无论如何,如果透视分割的整个目的是获得可用的x和y坐标,为什么还要将z除以w呢?另外我如何在第一时间获得w?
我一直在寻找一种方法来做到这一点,但找不到任何东西
我想要一个:
禁用输入文本字段,称为#XX.此输入将存储来自datepicker的选定值(因为此输入被禁用,我将无法使用它来触发datePicker)
按钮,除了#XX.当用户单击此按钮时,将显示datePicker.用户将选择日期,此日期将分配给禁用的输入#XX.
我想这样,所以用户不能手动更改 - 通过输入垃圾 - 选定的日期
另外,我应该验证是否使用#XX.val()输入了日期?或者,还有更好的方法?
据我所知,当我在GLFW上设置这些上下文约束时:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
Run Code Online (Sandbox Code Playgroud)
我应该在运行的机器上获得最大可用的OpenGL上下文,前提是它高于OpenGL 3.3.但是,通过使用glGetString获取OpenGL上下文版本,我发现情况并非如此.每次我查询glGetString上下文版本时,我只会得到我设置的主要和次要版本glfwWindowHint,上面没有.请记住,我的GPU支持OpenGL 4.5.
另外需要注意的是,当我没有设置任何约束时,我确实得到了一个OpenGL 4.5上下文.
这是完整的源代码,似乎可以复制问题:
#define GLEW_STATIC
#include <iostream>
#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <glm\glm.hpp>
int main(int argc, char argv[])
{
if (!glfwInit())
{
std::cerr << "Failed to initialize GLFW 3.0.4" << std::endl;
getchar();
glfwTerminate();
return -1;
}
std::cout << "Initialized GLFW 3.0.4" << std::endl;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* m_window = glfwCreateWindow(640, 480, "Koala", NULL, NULL);
if (!m_window)
{ …Run Code Online (Sandbox Code Playgroud) 我一直在努力学习如何使用单例设计模式并偶然发现:
static S& getInstance()
{
static S instance;
return instance;
}
Run Code Online (Sandbox Code Playgroud)
我注意到它返回了instance,它不应该归还instance&吗?
编辑:我还应该提到编译器似乎没有提出任何投诉.
所以我知道你可以使用以下方法生成缓冲区:
GLuint Buffer = 0;
glGenBuffers (1, &Buffer);
Run Code Online (Sandbox Code Playgroud)
我被告知这将在地址中生成1个缓冲区Buffer.我也被告知如果我这样做:
GLuint Buffer = 0;
glGenBuffers (2, &Buffer);
Run Code Online (Sandbox Code Playgroud)
然后它将在地址中生成2个缓冲区Buffer.那么如何访问这个第二个缓冲区呢?
为什么这个打印0?我发誓我疯了......说真的.
#include <iostream>
using namespace std;
int main()
{
int a = 0;
a + 1;
cout << a << endl;
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)