左上原点的OpenTK正交投影

时间:2019-12-01 15:50:02

标签: c# opengl projection opentk

如何设置openTK,以便在以下位置获得正投影:

  • 原点在屏幕的左上角
  • 我可以使用“正常”像素坐标,例如:如果我的窗口是500 X 400,则:
    • 0,0是左上角
    • 500,0是右上角
    • 500,400是右下角
    • 0,400是左下角

我目前有这个:

library(tidyr)
library(tibble)
library(stringr)
weights %>%
     mutate(rn = row_number())  %>%
     rename_at(vars(-rn), ~
           str_replace(., "_Q", ":Q") %>% 
             {case_when(str_detect(., ":") ~ .,
                TRUE ~ str_c(., ":A"))}) %>%
     pivot_longer(cols = -rn, names_sep=":",
        names_to = c("group", ".value"), values_drop_na = TRUE) %>% 
     split(.$group) %>% 
     map(~ select(., A, Q) %>% 
            deframe)
#$Q3A
#          1           2           3           4           5           6           7           8           9          10          11          12 
#0.132723112 0.161708619 0.048054920 0.025934401 0.007627765 0.027459954 0.078565980 0.016781083 0.092295957 0.221205187 0.051106026 0.012204424 
#         13          14          15          16 
#0.043478261 0.021357742 0.035850496 0.023646072 

#$Q5_1_REC
#         1          2          3          4 
#0.55411585 0.20503049 0.16692073 0.07393293 

#$Q5_2_REC
#        1         2         3         4 
#0.5923664 0.1396947 0.1320611 0.1358779 

#$RECAGE
#        1         2         3         4 
#0.1219512 0.3384146 0.3582317 0.1814024 

#$RECQ3
#        1         2         3         4 
#0.2132521 0.2437167 0.2505712 0.2924600 

我不能完全理解正在发生的事情,但是原点现在位于左下角,我也不知道坐标是否与屏幕上的像素匹配。

1 个答案:

答案 0 :(得分:0)

Matrix4.CreateOrthographicOffCenter的参数是leftrightbottomtopnearfar长方体视图体积。

如果视图(ClientRectangle.Y)的原点必须在顶部,则必须交换topbottom参数:

_projectionMatrix = Matrix4.CreateOrthographicOffCenter(
    ClientRectangle.X, 
    ClientRectangle.X + ClientRectangle.Width,
    ClientRectangle.Y + ClientRectangle.Height, 
    ClientRectangle.Y,
    -1.0f, 1.0f);