Raylib 坐標系適應與GPU繪制參數

?

通過750 - 鼠標坐標,把原點在左上角的鼠標坐標變成左下角

實現輸入數據后的坐標系同GPU原點在左下角坐標相同,

比數組0,0對應左上角好,

此時實際上數組0,0對應左下角

#include <raylib.h>
// 感受:雖然是根據已有的經驗進行移植,
//但是追隨當時無中生有的過程,去理解當時如何基于最直接的窮舉想出來的,
//沿著同樣的測試窮舉而不是照抄,因為有了另一個坐標系GPU左下角和鼠標左上角原點不同
//根據5.測試正方向 的注釋:數格子發現一行一行對應之后,再修改鼠標坐標系,產生新的坐標學習
int main() {int **map;map = new int*[750 / 30];for (int i = 0; i < 25; i++) {map[i] = new int[25];}for (int i = 0; i < 25; i++) {for (int j = 0; j < 25; j++) {map[i][j] = 0;}}//	初始化窗口InitWindow(750, 750, "test for location");
//	設置GPU可以操作的畫布,一定要再初始化窗口之后才行,實際上是OpenGL的上下文,或者說默認環境設置RenderTexture2D mesh = LoadRenderTexture(750, 750);
//	設置幀率SetTargetFPS(160);
//		設置默認繪制到meshBeginTextureMode(mesh);for (int i = 0; i < 25; i++) {for (int j = 0; j < 25; j++) {
//				繪制矩形,原點(0,0)在左下角,現在是從左下角一行一行往上繪制if (map[i][j] == 0) {DrawRectangle(j * 30, i * 30, 30, 30, {255, 255, 255, 255});}if (i == 0 || j == 0 || i == 24 || j == 24) {DrawRectangle(j * 30, i * 30, 30, 30, {0, 255, 255, 255});}}}
//		取消繪制的GPU畫布EndTextureMode();
//		設置默認繪制到桌面BeginDrawing();
//		黑色覆蓋全部屏幕ClearBackground(BLACK);DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 750, 750}, {0, 0}, 0, WHITE);
//		結束繪制的桌面EndDrawing();
//	這里開始主循環int drawx;int drawy;int mousex;int mousey;int drawi;int drawj;mousex = 0;mousey = 0;drawx = 0;drawy = 0;drawi = 0;drawj = 0;while (!WindowShouldClose()) {
//		如果鼠標左鍵按下if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
//			drawx = GetMousePosition().x;
//			無中生有坐標系變化過程
//			750,實際窮舉描述得到,在點一下,在鼠標坐標系是0,100,靠頂邊,
//			在GPU坐標系里0,100則是靠底邊100像素,
//			然后實際上是直接取反然后加上高度上限,發現原來可以
//			最后重整舊測試代碼實現
//			drawy = 750 - GetMousePosition().y;
//			drawy = 751 - GetMousePosition().y;
//			if (drawx < 0 || drawx > 750 || drawy < 0 || drawy > 750)
//			發現可以直接寫,標注數據變化,于是重新命名變量mousex = GetMousePosition().x;mousey = GetMousePosition().y;
//			測試之后,追加等號,發現等號設置在0處解決問題,750-0=750,750/30=25,數組出界,750-1=749,749/30=24,
//			可知減的多,不出界,剩下的少,于是就不出界if (mousex < 0 || mousex > 750 || mousey <= 0 || mousey > 750) {
//				如果出界就不繪制,因為長按時鼠標超出窗口仍然可以檢測} else {
//				進行坐標系變換,禁用了原理代碼drawx = mousex;drawy = 750 - mousey;drawj = drawx / 30;drawi = drawy / 30;map[drawi][drawj] = 1;}}//		設置默認繪制到meshBeginTextureMode(mesh);for (int i = 0; i < 25; i++) {for (int j = 0; j < 25; j++) {
//				繪制矩形,原點(0,0)在左下角,現在是從左下角一行一行往上繪制if (map[i][j] == 0) {DrawRectangle(j * 30, i * 30, 30, 30, {255, 255, 255, 255});} else if (map[i][j] == 1) {DrawRectangle(j * 30, i * 30, 30, 30, {255, 0, 0, 255});}
//				測試邊界繪制時,禁用,看閃退有無時測試
//				if (i == 0 || j == 0 || i == 24 || j == 24) {
//					DrawRectangle(j * 30, i * 30, 30, 30, {0, 255, 255, 255});
//				}if (i == 0 || j == 0 || i == 24 || j == 24) {DrawRectangle(j * 30, i * 30, 30, 30, {0, 255, 255, 255});}}}
//		取消繪制的GPU畫布EndTextureMode();//		設置默認繪制到桌面BeginDrawing();
//		黑色覆蓋全部屏幕ClearBackground(BLACK);
//			DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 750, 750}, {0, 0}, 0, WHITE);
//		右移動100像素
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {100, 0, 750, 750}, {0, 0}, 0, WHITE);
//		左移動100像素
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 750, 750}, {100, 0}, 0, WHITE);
//		縮小到75*75大小像素
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 75, 75}, {0, 0}, 0, WHITE);
//		平移縮小的矩形右100像素
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {100, 0, 75, 75}, {0, 0}, 0, WHITE);
//		抵消
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {100, 0, 75, 75}, {100, 0}, 0, WHITE);
//		下移100像素
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 100, 75, 75}, {0, 0}, 0, WHITE);
//		抵消了下移,回到原地,可知是上移
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 100, 75, 75}, {0, 100}, 0, WHITE);
//		實錘上移像素
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 75, 75}, {0, 50}, 0, WHITE);
//		得出結論:后面的括號是管往左移動,往上移動,前面括號的兩個數字往右,往下移動調節
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 75, 75}, {0, 50}, 0, WHITE);
//		但是可以負數反向,實現在一個括號里實現移動效果,可知是對應不同坐標系下,提供的快速適應方案
//		DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 75, 75}, {0, -50}, 0, WHITE);
//		恢復原樣DrawTexturePro(mesh.texture, {0, 0, 750, 750}, {0, 0, 750, 750}, {0, 0}, 0, WHITE);DrawText(TextFormat("mouseV1 %.0f,%.0f", GetMousePosition().x, GetMousePosition().y), 35, 12, 30, BLUE);DrawText(TextFormat("mouseV2 %.0f,%.0f", GetMousePosition().x, 750 - GetMousePosition().y), 35, 62, 30, BLUE);DrawText(TextFormat("drawjiV2 %d,%d", drawj, drawi), 35, 92, 30, BLUE);DrawText(TextFormat("drawxyV2 %d,%d", drawx, drawy), 35, 122, 30, BLUE);
//		結束繪制的桌面EndDrawing();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/39017.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/39017.shtml
英文地址,請注明出處:http://en.pswp.cn/web/39017.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【SpringBoot配置文件讀取】無法讀取yaml文件中文字符

1. yaml配置文件 注意要將該文件編碼格式改為UTF-8 spring:application:name: 好好學習admin:name: 李斯age: 24books:- name: 數據結構desc: 數據書- name: 編譯原理desc: 編譯書2.配置實體類 Data設置get&#xff0c;set方法Component注冊為BeanConfigurationProperties(p…

開發者聊科學作息時間表

非常有幸對科學作息時間表app的開發者做一次采訪。 問&#xff1a;你對科學作息時間表app滿意么&#xff1f; 答&#xff1a;非常不滿意&#xff0c;我們的設想是讓他更智能&#xff0c;更多的提醒方式&#xff0c;更好的交互體驗。如果作為一個鬧鐘他是非常不合格的&#xff0…

輕松駕馭Python 3.11:Windows環境下的安裝與配置全攻略

引言 Python是一種功能強大且易于學習的編程語言&#xff0c;廣泛應用于Web開發、數據分析、人工智能和自動化等領域。為了在Windows中使用Python&#xff0c;首先需要安裝Python解釋器并進行環境配置。本文將詳細介紹如何在Windows中安裝Python 3.11并進行環境配置。 目錄 …

R可視化數據必要格式——長格式

一、引言 我們在對數據進行可視化時遇到最頭疼、最常見的問題是什么&#xff1f;數據問題。 因為我們往往不會從零自己編程進行可視化&#xff0c;往往是現有模板或積累&#xff0c;而正確的數據格式對應正確的圖形包要求&#xff0c;一定會正確出圖&#xff0c;所以只有一個問…

調試 hipcc 的llvm llc gpu目標代碼生成模塊

源碼&#xff1a; hello_vectorAdd.hip: __global__ void vectorAdd(const float *A, const float *B, float *C) {int i blockDim.x * blockIdx.x threadIdx.x;C[i] A[i] B[i] 0.0f; } Makefile: x.O1.s: hello_vectorAdd.hip../../local_amdgpu/bin/clang ./hello_vec…

力扣hot100-普通數組2

文章目錄 題目&#xff1a;輪轉數組方法1-使用額外的數組方法2-三次反轉數組 除自身以外數組的乘積方法1-用到了除法方法2-前后綴乘積法 題目&#xff1a;輪轉數組 原題鏈接&#xff1a;輪轉數組 方法1-使用額外的數組 方法1是自己寫出來的。方法2參考的別人的&#xff0c;…

通配符和正則表達式之間的關系

通配符和正則表達式&#xff08;正則&#xff09;都是用于匹配字符串的工具&#xff0c;但它們的復雜性和用途有所不同。下面是它們之間的主要關系和區別&#xff1a; 通配符 通配符主要用于簡單的模式匹配&#xff0c;常見于文件系統操作中&#xff0c;例如在命令行中查找文…

AttackGen:一款基于LLM的網絡安全事件響應測試工具

關于AttackGen AttackGen是一款功能強大的網絡安全事件響應測試工具&#xff0c;該工具利用了大語言模型和MITRE ATT&CK框架的強大功能&#xff0c;并且能夠根據研究人員選擇的威脅行為組織以及自己組織的詳細信息生成定制化的事件響應場景。 功能介紹 1、根據所選的威脅行…

【MindSpore學習打卡】應用實踐-計算機視覺-FCN圖像語義分割-基于MindSpore實現FCN-8s進行圖像語義分割的教程

圖像語義分割是計算機視覺領域中的一個重要任務&#xff0c;它旨在對圖像中的每個像素進行分類&#xff0c;從而實現對圖像內容的詳細理解。在眾多圖像語義分割算法中&#xff0c;全卷積網絡&#xff08;Fully Convolutional Networks, FCN&#xff09;因其端到端的訓練方式和高…

7.7、指針和函數

代碼 #include <iostream> using namespace std;//實現兩個數字進行交換 void swap01(int a, int b) {int temp a;a b;b temp;cout << "swap01a " << a << endl;cout << "swap01b " << b << endl; }void sw…

08 docker Registry搭建docker私倉

目錄 本地鏡像發布流程 1. docker pull registry 下載鏡像 2. docker run 運行私有庫registry 3. docker commit 構建鏡像 4. docker tag 修改新鏡像&#xff0c;使之符合私服規范tag 5. 修改配置文件使之支持http 6. curl驗證私服庫上有什么鏡像 7. push推送 pull拉取 …

Activity、Window、DecorView的關系

目錄 一、Activity、Window、DecorView的層級關系如下圖所示&#xff1a; 1、Activity 2、Window 3、DecorView 二、DecorView初始化相關源碼 三、DecorView顯示時機 前言&#xff1a; 不同的Android版本有差異&#xff0c;以下基于Android 11進行講解。 一、Activi…

Halide AOT模式

這種模式會提前&#xff0c;會提前編譯好&#xff0c;變成dll什么的&#xff0c;可接受任何輸入的參數運行。 然后這樣調用&#xff0c;必須要make一下前一個file&#xff0c;才有后面的.h

魔行觀察-AI數據分析-蜜雪冰城

摘要 本報告旨在評估蜜雪冰城品牌作為投資對象的潛力和價值&#xff0c;基于其經營模式、門店分布、人均消費、覆蓋省份等關鍵指標進行分析。 數據數據源&#xff1a;魔行觀察&#xff1a;http://www.wmomo.com/#/brand/brandDetails?code10013603 品牌概覽 蜜雪冰城是中國…

拼多多職位數據信息采集

數據信息采集 洛哥爬蟲【視頻】 愛寫爬蟲 我愛扣腳 https://careers.pinduoduo.com/jobs#/from DrissionPage import ChromiumPage, ChromiumOptions def fetch_pinduoduo_jobs():# 創建ChromiumOptions對象co ChromiumOptions()# 提供瀏覽器可執行文件的路徑path rC:\Pro…

Vue 爬坑

都是基于最新的Vue3版本 "vue": "^3.4.29" 1 vue組建樣式設置 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vue </script><template><div><a href"https://vitejs.dev" tar…

RPA 第一課

RPA 是 Robotic Process Automation 的簡稱&#xff0c;意思是「機器人流程自動化」。 顧名思義&#xff0c;它是一種以機器人&#xff08;軟件&#xff09;來替代人&#xff0c;實現重復工作自動化的工具。 首先要說一句&#xff0c;RPA 不是 ChatGPT 出來之后的產物&#x…

Ubuntu24.04安裝Skynet環境

安裝依賴 sudo apt-get -y install gcc sudo apt-get -y install g sudo apt-get -y install make sudo apt-get install -y autoconf automake libtool sudo apt-get install -y git 或者可以用&#xff1a; sudo apt-get -y install gcc g make autoconf automake libtool…

升級springboot3

坑爹的發版流水線&#xff0c;管天管地&#xff0c;springboot2過了維護期&#xff0c;就催著我們升級。 導致必須上jdk17 記錄一下升級需要處理的事情 先升級springboot和cloud&#xff0c;這里定下基調&#xff0c;其他的才好跟著升級 https://spring.io/projects/spring-b…

如何在Java中使用正則表達式

如何在Java中使用正則表達式 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 正則表達式&#xff08;Regular Expression&#xff0c;簡稱Regex或RegExp&#…