为啥我的OpenGL程序只输出一个白色背景的窗口而没有图形呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我的OpenGL程序只输出一个白色背景的窗口而没有图形呢?相关的知识,希望对你有一定的参考价值。

程序源代码:
#include "gl/glut.h"

static int day = 200; // day 的变化:从 0 到 359
void Display(void)

glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0,0.0,0.0,0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75, 1, 1, 400000000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0,
0, 1);
// 绘制红色的“太阳”
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidSphere(69600000, 20, 20);
// 绘制蓝色的“地球”
glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(150000000, 0.0f, 0.0f);
glutSolidSphere(15945000, 20, 20);
// 绘制黄色的“月亮”
glColor3f(1.0f, 1.0f, 0.0f);
glRotatef(day/30.0*360.0 - day/360.0*360.0, 0.0f,
0.0f, -1.0f);
glTranslatef(38000000, 0.0f, 0.0f);
glutSolidSphere(4345000, 20, 20);
glFlush();

void main(int argc,char* argv[])

glutInit(&argc,argv); //初始化OpenGL
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); //设置显示模式
glutInitWindowSize(600,480);//设置出现的窗口的大小
glutCreateWindow("太阳系");//创建窗口
glutDisplayFunc(Display);//注册一个绘图函数
glutMainLoop(); //进入OpenGL主循环

参考技术A

错误有3个,

(1)深度测试

(2)glLookAt中eyeZ参数

(3)双缓存模式却忘了加glutSwapBuffers()


修改后的代码,以及相关的注释,我都放在附件的cpp文件里了。


p.s. VS2012上跑的,能显示红、蓝、黄3个椭圆。



本回答被提问者和网友采纳

为啥我运行程序时WPF标题栏背景是白色的?

【中文标题】为啥我运行程序时WPF标题栏背景是白色的?【英文标题】:Why is WPF Titlebar background white when I run program?为什么我运行程序时WPF标题栏背景是白色的? 【发布时间】:2019-05-28 16:28:14 【问题描述】:

Xaml Designer 将窗口标题栏显示为深灰色(默认),但是当我运行应用程序时,标题栏是纯白色的。

标题栏颜色不应该使用我的 Windows 主题设置吗?为什么不呢?

我启动了一个全新的 .NET Framework 4.6.2 WPF 应用程序。我完全没有改变。我运行应用程序,我得到了描述的行为。

这是主窗口的默认 XAML 代码:

<Window x:Class="WpfApp2.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp2"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>

</Grid>

这是 App.xaml:

<Application x:Class="WpfApp2.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:WpfApp2"
         StartupUri="MainWindow.xaml">
<Application.Resources>

</Application.Resources>

【问题讨论】:

在 windows10 中,它取决于 Windows 主题设置,不确定早期版本。 呃。好吧,我的 Windows 10 主题设置为深色,我的所有应用程序都显示深灰色标题栏。甚至 XAML 设计器也显示深灰色。但是当我运行应用程序时,它是神秘的白色!这完全令人费解!我在 Google 上找不到任何关于它的信息。 您可以添加您的 XAML 示例吗? 我添加了代码并改进了帖子。 @JamesHoux 您可以通过调用 COM api blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx docs docs.microsoft.com/en-us/windows/desktop/dwm/customframe 【参考方案1】:

我没有意识到这一点,但应用程序将使用默认的白色标题栏,除非您在 Windows 主题设置中特别选中将主题重音应用于标题栏。

起初我对此感到困惑的原因是 XAML 设计器窗口在设计视图中将窗口标题栏显示为深灰色。它在运行时变为白色。我错误地认为深灰色的标题栏尊重了深色 Windows 主题。它不是!它实际上是在尊重 Dark Visual Studio 主题。

显然,Visual Studio 中选择的主题决定了 XAML 设计器中的标题栏颜色,这会导致应用程序运行时的外观错误。

我一开始就发布了这个问题,我觉得很愚蠢,但我只是认为存在某种我不知道的 XAML 配置点。 :P

【讨论】:

以上是关于为啥我的OpenGL程序只输出一个白色背景的窗口而没有图形呢?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL:如何设置 OpenGL 只渲染到 FBO,不输出到屏幕/窗口/控件?

OpenGL:程序呈现纯白色正方形而不是变换后的正方形

为啥片段着色器没有附加?

为啥我的程序的选项卡控件以块状方式呈现其背景,而标准的窗口对话框却不是?

为啥我的窗口左角有一个奇怪的白色矩形?

OpenGL 因当前代码而崩溃(从书中跟随)