我代码作为NeHe导师Lesson27告诉我,但它是一个z-pass算法.当我在阴影中时,阴影消失.有人告诉我,我可以使用z-fail算法来解决这个问题.所以我花了两天时间来研究z-fail算法.最后,我无法弄明白.我的程序永远不会像我想的那样运行.
作为wiki列出的z-fail算法:
深度失败在2000年左右,有几个人发现Heidmann的方法可以通过反转深度来适用于所有摄像机位置.而不是计算对象表面前面的阴影表面,它后面的表面可以很容易地计算,具有相同的最终结果.这解决了眼睛处于阴影中的问题,因为眼睛和物体之间的阴影体积不计算,但是引入了阴影体积的后端必须加盖的条件,或者阴影将最终丢失在体积指向的位置向后无穷大.
禁用对深度和颜色缓冲区的写入.
使用正面剔除.
将模板操作设置为在深度失败时递增(仅计算对象后面的阴影).
渲染阴影卷.
使用背面剔除.
将模板操作设置为在深度失败时递减.
渲染阴影卷.
我认为的主要问题是深度测试.在步骤3和6,模板操作基于深度失败.虽然它可以显示阴影,但它可能在它之前的对象上阴影(即:深度缓冲值小于它的对象).所有阴影效果看起来很乱.
但是在z-pass算法中,模板操作基于深度通过,这意味着它不仅可以显示阴影,而且仅在其后面的对象上阴影,符合眼睛系统.
所以如何解决这个问题使我的深度失败算法显示出正确对象的阴影.
这是我的z-fail算法代码(某处可能在哪里,请帮我看看,阴影效果很糟糕)
VECTOR vec;
void shadowvolume(SECTOR &sec,float *lp)
{
unsigned int p1, p2;
VECTOR v1, v2;
int i, j, k, jj;
for (i=0; i<sec.numplanes;i++)
{
if (sec.planes[i].visible)
{
for (j=0;j<3;j++)
{
k = sec.planes[i].neigh[j];
if ((!k) || (!sec.planes[k-1].visible))//????k??????????????????????
{
// here we have an edge, we must draw a polygon
p1 = sec.planes[i].p[j]-1;//?????
jj = (j+1)%3;
p2 = sec.planes[i].p[jj]-1;//?????
//calculate the length of the vector
v1.x = (sec.points[p1].vec.x …
Run Code Online (Sandbox Code Playgroud) 好吧,所以当我创建一个新的可可项目时,总会有2个文件为我创建.这是.h
和.m
NAME AppDelegate
文件.我已经阅读了很多关于可可的书和来自苹果的纪录片,它告诉我创建新文件而不是使用它.那两个文件有什么意义呢?删除它们是否安全?
所以我想appendBezierPathWithPoints:count:
在NSBezierPath中使用该方法 .但该方法要求我使用NSPointArray.这部纪录片并没有真正谈论它,我所能得到的只是它是一系列NSPoints,我不知道该怎么做.我认为它使用了c数组机制,但我不确定.
谢谢.
我正在尝试用来setAcceptsTouchEvents:YES
识别触控板上的自定义触摸事件.只需触摸触控板即可touchesBeganWithEvent
.但是,如果我在触控板上做手势,如捏或滚动touchesBeganWithEvent
开始正常工作.经过其中一个手势,即使我只是触摸触控板的touchesBeganWithEvent
工作.但我需要使用touchesBeganWithEvent
简单的触摸,而无需先做手势.它的方式似乎我必须做一个手势来初始化setAcceptsTouchEvents:YES
.我究竟做错了什么?
PS:setAcceptsTouchEvents:YES
进入initWithFrame
,我可以看到它在应用程序启动时执行.
在Cocoa中,当我们想要重绘视图时,我们会向视图发送一条setNeedsDisplay:
消息,告诉视图使用参数YES重绘自身.我想知道是否有任何情况你想发送一个视图setNeedsDisplay:NO
,比如多线程环境,如果发送一个视图a setNeedsDisplay:YES
,然后立即再次设置它setNeedsDisplay:NO
会使视图重绘自己.如果没有理由打电话setNeedsDisplay:NO
,那么为什么要创建这样一个乏味的方法,他们可以在那里实现类似的东西[view redrawView]
我在我的应用程序中使用cocoa webview进行富文本编辑.只是与webkit中可用的innerHtml和outerHtml方法混淆.
任何人都可以解释有什么区别
[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerHTML];
Run Code Online (Sandbox Code Playgroud)
和
[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerText];
Run Code Online (Sandbox Code Playgroud) 这似乎是一个简单的问题,但我并不知道何时应该使用alloc,retain或copy.
所以我的问题基本上是如何获得NSTextStorage/NSString中的单词数量?我不想要字符长度而是字长.谢谢.
我现在要做的是创建一个长度由变量定义的数组.但是,当我将变量放入数组长度时,它给了我一个"可变长度数组的非POD元素类型'glm :: vec2'"错误.但是,如果我用实际数字替换变量,则错误消失.为什么会发生这种情况?我该如何解决这个问题?
int numtriangles = sector1.numtriangles;
glm::vec2 tex[test]; //Using a variable generates an error
glm::vec3 vertices[10]; //No error here
Run Code Online (Sandbox Code Playgroud)