我注意到你确实可以continue在switch语句中使用关键字,但是在PHP上它并没有达到我的预期.
如果它失败了PHP,谁知道它失败了多少其他语言呢?如果我在语言之间切换很多,如果代码的行为不像我期望的那样,那么这可能是一个问题.
我应该避免continue在switch语句中使用吗?
PHP(5.2.17)失败:
for($p = 0; $p < 8; $p++){
switch($p){
case 5:
print"($p)";
continue;
print"*"; // just for testing...
break;
case 6:
print"($p)";
continue;
print"*";
break;
}
print"$p\r\n";
}
/*
Output:
0
1
2
3
4
(5)5
(6)6
7
*/
Run Code Online (Sandbox Code Playgroud)
C++似乎按预期工作(跳转到for循环结束):
for(int p = 0; p < 8; p++){
switch(p){
case 5:
cout << "(" << p << ")";
continue;
cout << "*"; // just for testing...
break;
case 6:
cout << "(" << …Run Code Online (Sandbox Code Playgroud) 我的目标是将没有窗口的OpenGL场景直接渲染到文件中.场景可能比我的屏幕分辨率大.
我怎样才能做到这一点?
我希望能够选择任何大小的渲染区域大小,例如10000x10000,如果可能的话?
在:C++ FAQ - 其他技术问题 - [39.6]对于需要将两个令牌粘贴在一起的宏应该怎么做?
有人可以向我解释原因吗?我所读到的只是相信我,但我不能仅仅相信某事,因为有人这么说.
我尝试了这种方法,但我找不到任何错误:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
Run Code Online (Sandbox Code Playgroud)
那么为什么我需要这样做呢(引自网页):
但是,当您使用##时,需要双层间接.基本上你需要为"令牌粘贴"创建一个特殊的宏,例如:
Run Code Online (Sandbox Code Playgroud)#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b相信我 - 你真的需要这样做!(并且请没有人写信给我说它有时可以在没有第二层间接的情况下工作.尝试用__ LINE__连接一个符号然后看看会发生什么.)
编辑:有人也可以NAME2_HIDDEN在下面宣布之前解释他为什么使用?NAME2_HIDDEN在使用宏之前定义宏似乎更合乎逻辑.这是某种伎俩吗?
每当我查看一些Java源代码时,我发现自己在一个文件夹中浏览,该文件夹中包含文件夹,其中包含文件夹等.为什么Java需要这么多嵌套文件夹,除了新的子文件夹之外没有其他内容?
例如:https: //github.com/halfninja/android-dragcontrol3d/tree/master/src/uk/co/halfninja/android 这可能不是最糟糕的例子,但有两个文件夹"uk"和"co"只是没有意义.我只在Java源代码中看到这个!
例如minicraft:http://www.ludumdare.com/compo/ludum-dare-22/?action = preview&uid = 398
import com.mojang.ld22.gfx.Font;
import com.mojang.ld22.gfx.Screen;
import com.mojang.ld22.gfx.SpriteSheet;
Run Code Online (Sandbox Code Playgroud)
为什么不写:
import gfx.Font;
import gfx.Screen;
import gfx.SpriteSheet;
Run Code Online (Sandbox Code Playgroud)
那太干净了.
(我从未在Java中编程.)
我想弄清楚为屏幕外渲染创建无窗口OpenGL程序的最简单方法是什么.
目前我使用它,到目前为止工作正常:(为清晰起见,此处删除了错误检查)
BOOL create_opengl_context(){
GLuint PixelFormat;
static PIXELFORMATDESCRIPTOR pfd;
hDC = GetDC(NULL);
PixelFormat = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, PixelFormat, &pfd);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
}
Run Code Online (Sandbox Code Playgroud)
这样安全吗?创建无窗口OpenGL程序的"标准"方法是什么?
编辑:我正在使用FBO进行屏幕外渲染.
编辑:只是让你知道:我还没有完全解决这个问题,目前我正在使用0.5px偏移,它似乎工作,但正如其他人所说,它不是"适当的"解决方案.所以我正在寻找真正的交易,钻石退出规则解决方案根本不起作用.
我相信它可能是显卡中的一个错误,但如果是这样,那么任何专业程序员都应该为此提供防弹解决方案,对吧?
编辑:我现在买了一张新的nvidia卡(以前有ATI卡),我仍然遇到这个问题.在很多很多游戏中我也看到了同样的错误.所以我想这是不可能以一种干净的方式修复?
这是错误的图像:

你是如何克服这个问题的?如果可能的话,最好是非着色器解决方案.当我自己绘制4条单独的线而不是使用线框模式时,我尝试设置第一条线的偏移量,但是效果不是很好:如果矩形大小改变了,它有时看起来很完美,但有时甚至比修复之前更糟糕.
这就是我渲染四边形的方式:
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_QUADS);
glVertex2f(...);
glVertex2f(...);
glVertex2f(...);
glVertex2f(...);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
Run Code Online (Sandbox Code Playgroud)
是的,我知道我可以使用顶点数组或VBO,但这不是重点.
我也尝试过GL_LINE_LOOP,但它没有解决这个问题.
编辑:一个解决方案是,到目前为止:Lie Ryan的Opengl像素完美2D绘图:
请注意,OpenGL坐标空间没有整数概念,一切都是浮点数,OpenGL像素的"中心"实际上是0.5,0.5而不是左上角.因此,如果你想要从0,0到10,10(含)的1px宽线,你真的必须画一条从0.5,0.5到10.5,10.5的线.
如果你打开抗锯齿,这将是特别明显的,如果你有抗锯齿,并且你尝试从50,0到50,100绘制,你可能会看到模糊的2px宽线,因为线条落在两个像素之间.
我在哪里可以获得渲染实心三角形的算法?Edit3:我无法使用OpenGL进行渲染.我需要每像素算法.
我的目标是从三角形渲染一个正多边形,所以如果我使用这个三角形填充算法,每个三角形的边缘将不会重叠(或在它们之间产生间隙),因为如果我使用例如它会导致渲染错误XOR渲染像素.
因此,渲染质量应与OpenGL渲染相匹配,因此我应该能够定义 - 例如 - 具有N顶点的圆,并且它将呈现为任意大小的圆形; 所以它不像一些三角形填充算法那样仅使用整数坐标来渲染它.
我需要能够控制三角形填充自己:我可以添加自己的逻辑,了解每个像素的渲染方式.所以我需要渲染背后的裸代码,以完全控制它.它应该足够有效地绘制成千上万个三角形而不用等待超过一秒钟.(我不确定它的速度有多快,但我希望它不会超过10秒).
首选语言是C++,但我可以根据自己的需要转换其他语言.
如果没有免费的算法,我可以在哪里学习自己构建一个,实际上有多难?(我=数学菜).
我添加了OpenGL标签,因为这与它有某种关系.
编辑2:我在这里尝试了算法:http://joshbeam.com/articles/triangle_rasterization/但它似乎有点破碎,这里是一个带有64个三角形的圆圈:

但如果你放大,你可以看到错误:

说明:有2个像素与其他三角形颜色重叠,不应该发生!(或透明度或XOR等效果会产生不良渲染).
似乎错误在较小的圆圈上更明显.如果我想对像素有XOR效果,这是不可接受的.
我该怎么做才能解决这些问题,所以它会在没有重叠像素或间隙的情况下完美填充?
编辑4:我注意到渲染非常小的圆圈并不是很好.我意识到这是因为坐标确实转换为整数.如何将坐标视为浮点数并使其像OpenGL一样精确而完美地渲染圆圈?以下是小圆圈看起来有多糟糕的例子:

注意OpenGL渲染是多么完美!这就是我想要实现的,而不使用OpenGL.注意:我不想只渲染完美的圆形,而是任何多边形形状.
由于GL_LINE_SMOOTH不是硬件加速,并非所有GFX卡都支持,如何在2D模式下绘制平滑线,这看起来与GL_LINE_SMOOTH一样好?
编辑2:我目前的解决方案是从2个四边形中绘制一条线,从边缘渐变为零透明度,这两个四边形之间的颜色将是线条颜色.它对于基本的平滑线条渲染效果不错,并且不使用纹理,因此渲染速度非常快.
我正在试图弄清楚如何确定需要多少个顶点才能使我的圆圈看起来尽可能平滑.
以下是两个圆的示例,两个圆都有24个顶点:

如您所见,圆圈越大,我需要隐藏直线的顶点越多.
起初我认为边缘上一条线的最小长度应该是6px,但是当我增加圆形尺寸时,这种方法失败了:我得到了太多的顶点.我还考虑过计算角度,但我很快意识到角度在不同大小的圆圈上没有差异.我也检查了这个答案,但我不知道如何将它转换为代码(以及那些奇怪的东西:th用它来计算自己),我认为它甚至不起作用,因为作者正在使用从一个切片到圆圈中间的角度,如果圆圈变大则不会改变.
然后我意识到可能解决方案是检查边缘处两个顶点之间的角度,这样:

如您所见,顶点越少,这些三角形的长度就越大.所以这必须是答案,我只是不知道如何使用这些信息来计算顶点的数量.
目前我使用45度角为我的gluPerspective().这是正确的角度,使渲染在人类感知它时看起来真实吗?窗口纵横比也存在问题,例如2:1窗口将使得45度角看起来更像是具有3:4比例等的屏幕上的80度角.因此窗口尺寸也改变了视角.
那么,与人类如何看待世界相比,使游戏看起来最真实的窗口大小比例和视角是多少?
c++ ×8
opengl ×5
geometry ×2
off-screen ×2
rendering ×2
windows ×2
fieldofview ×1
glsl ×1
java ×1
macros ×1
math ×1
php ×1
visual-c++ ×1