我的Index()
是CalendarController
的一半。
x,y,w,h = 0,0,512,512
我的public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ReferenceTables", // Route name
"ReferenceTables/{action}/{tablename}/{id}", // URL with parameters
new { controller = "ReferenceTables", action = "Index", id = @"" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
区域是完整的RedirectToAction
x,y,w,h = 0,0,0 1024,512
我从左到右画一条远在 try{
String strText =
Jsoup
.connect("http://www.whatismyreferer.com")
.referrer("http://www.google.com")
.get()
.text();
System.out.println(strText);
}catch(IOException ioe){
System.out.println("Exception: " + ioe);
}
之外的线。我期待只在视口内绘制线条。我已经在三张不同的图形卡上测试了这个,其中两张,我得到了我期待的结果。但是在第三个方面,该行是在viewport
之外,但在screen size/framebuffer
区域内。
哪一个结果在这里是正确的?据我所知,线条'应将两个顶点移动到外scissor
个位置。不应该在它之外画出来。
如果您在本网站上阅读了framebuffer
的陷阱:
https://www.opengl.org/archives/resources/features/KilgardTechniques/oglpitfall/
他们正在讨论在viewport
之外进行绘制,但这只是一些特殊情况,例如,如果你有一条很粗的线,我的线宽为viewport
答案 0 :(得分:6)
编辑:在KhronosGroup讨论后: 从规范Vulkan 1.0.68:
如果线段的任何一个顶点位于剪辑体积之外, 线段可以被剪裁,计算新的顶点坐标 对于位于剪辑卷外部的每个顶点。修剪线 段端点位于原始线段和 剪辑音量的边界。
的Nvidia:
我们故意为维护2做了这个改变,允许 流行点和线。点剪切行为是可查询的但是 线裁剪行为不是,虽然我相信“首选” 行的行为是流行的。我们更改了NVIDIA驱动程序 去年从紧缩到无流行,甚至改变了CTS测试 允许这种新行为。所以这一切都按设计工作。
旧答案:
视口定义从标准化设备坐标到窗口坐标的转换。视口转换不会进行任何裁剪。
然而,裁剪确实发生在NDC
空间之前,视锥体裁剪确保没有顶点落在视口之外。如果您使用正交投影,剪辑空间和NDC
空间是相同的。因此,[-1,1]
之外的所有内容都将被剪裁。如果你没有做任何特殊情况,应该修剪opengl链接谈论顶点。
如果你的两个显卡在视口内部而另一个在外部,则可能是驱动程序错误。如果您使用的是相当新的Vulkan,那很可能就是这种情况。
答案 1 :(得分:4)
编辑:我的答案在技术上是正确的,但无用。视口变换本身不定义剪辑体积或剪刀。但由于剪切到视锥体([-w,+ w]为x和y,[0,+ w]为z),进入视口变换的所有(x,y)值都将在[-1, 1],并且不会被转换为落在定义视口的矩形之外。
与GL类似,视口仅定义从标准化设备坐标到帧缓冲坐标的变换。变换基于视口体积的宽度/高度/深度/原点,但该体积不定义剪切体积。数学在23.5 Controlling the Viewport部分中描述。
在Vulkan中,您还可以在VkPipelineViewportStateCreateInfo:: pScissors
或vkCmdSetScissor
中为每个视口指定帧缓冲坐标中的剪刀矩形。此矩形外的像素被删除。但是你必须自己设置剪刀矩形,并且它不必与视口体积匹配。