为啥我的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主循环
错误有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,不输出到屏幕/窗口/控件?