pygame伪3d 实现地面效果

news2024/9/22 23:21:13

教程来自What is Mode 7? Let’s code it!
油管镜像在这里插入图片描述

import cv2
import pygame
import sys
from pygame import gfxdraw
import numpy as np

(width, height) = (800, 600)
pygame.init()
screen = pygame.display.set_mode((width, height))
image = pygame.image.load("11.jpg").convert()
d3=pygame.surfarray.array3d(image)
f=250#数字大会显示更前面的图片
sc=300#数字越大视角越高
color=(255, 255, 255)
#print(len(d3[0][0]))#len(d3 )就是有多少张表 一个[0]是有多高 两个是每个表有几列 三个就是具体数
#print(d3[0][0][0])
#print(d3)
#sarray=pygame.surfarray.array3d(pygame.surface((50,50)))
sarray=pygame.surfarray.array3d(pygame.Surface((width,height)))
#sarray[:]=(255,255,0)变成黄色,替换所有为(255,255,0)

tsize=image.get_size()#图片宽高
print(tsize)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse = pygame.mouse.get_pos()
            '''pxarray = pygame.PixelArray(screensurf)
            pixel = pygame.Color(pxarray[mouse[0], mouse[1]])#获取像素
            print (pixel)
            print (screensurf.get_at(mouse))#颜色
            print(mouse[0], mouse[1],mouse)#点击坐标
            print(img.get_at(mouse))#颜色'''
            #pygame.Surface.set_at(screen, (140, 140), (img.get_at(mouse)))
            print(mouse[0], mouse[1], mouse)  # 点击坐标
    for i in range(width):
        for j in range(int(height/2),height):
            x=(width/2)-i
            y=j+f
            z=j-(height/2)+0.01
            '''
            def huizhi(x, y, z):
            shiju = 300
            x1 = shiju * x / z
            y1 = shiju * y / z
            # p.append((x1,y1))
            return x1, y1
            '''
            px=x/z*sc
            py=y/z*sc

            fp=int(px%tsize[0]),int(py%tsize[1])#tsize【0】,【1】是图片宽高
            fc=d3[fp]
            sarray[i,j]=fc
    pygame.surfarray.blit_array(screen,sarray)
    pygame.display.update()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch基础学习(SpringBoot集成ES)

一、概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎。 它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 ES也…

什么是API接口?主要作用是什么?

API英文全称为:Application Programming Interface,中文意思是应用程序编程接口,它是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力。 主要作用: API之主要目的是提供应用程…

【笔记】Pycharm配置Node.js运行js代码

最近在学习关于Js逆向的知识,需要在PyCharm中运行Js程序,记录一下配置过程。 安装Node.js Node.js中文网 选择自己电脑对应的安装包下载暗转即可 安装好软件后,配置node.js环境变量。 完成安装和环境配置后,打开cmd测试是否安…

解决 idea 中使用 git 提交显示多余空行

解决 idea 中使用 git 提交显示多余空行 1、问题描述2、解决方法 欢迎访问我的个人博客:https://wk-blog.vip 1、问题描述 在 idea 中使用Git提交代码时,发现不管是对于代码文件还是其他纯文本文件,在保存时总会在文件末尾加上一个空行&…

网络应用基础 TCPIP协议(NETBASE第四课)

网络应用基础 TCPIP协议(NETBASE第四课) TCP/IP 百度百科 CP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是T…

【Excel经验】日期时间处理方法

概览-公式汇总 公式功能公式公式说明提取时间中的日期TEXT(A2,“yyyy-mm-dd”)A2列数据格式样例:2023/7/5 6:20:10计算耗时得到单位:秒数VALUE(TEXT(B2-A2,“[ss]”))A2、B2列数据格式样例:2023/7/5 6:20:10计算耗时得到格式化显示年月日B2-…

基础算法-子矩阵的和

1 课堂笔记 2 代码 3.代码解析 #include<iostream> using namespace std; const int maxn1010; int a[maxn][maxn],s[maxn][maxn]; int n,m,q,x1,y1,x2,y2;int main(){scanf("%d%d%d",&n,&m,&q);//为数组赋值for(int i1;i<n;i){for(int j1;j&…

Mycat【Mycat分片规则(按日期(天)分片、全局序列)、Mycat高可用(Mycat高可用概述)】(七)-全面详解(学习总结---从入门到深化)

目录 Mycat分片规则_按日期&#xff08;天&#xff09;分片 Mycat分片规则_全局序列 Mycat高可用_Mycat高可用概述 Mycat分片规则_按日期&#xff08;天&#xff09;分片 实现原理 此规则为按天分片&#xff0c;设定时间格式、范围。 实现过程 创建示例表 #用户信息表 …

Linux时间子系统

转自&#xff1a;深入理解Linux时间子系统(0.7)_城中之城的博客-CSDN博客 一、时间概念解析 我们住在空间里&#xff0c;活在时间中。时间对我们来说是既熟悉又陌生。熟悉是因为我们每天都在时间的驱动下忙碌着&#xff0c;陌生是因为我们从来没有停下来认真思考过时间是什么…

C++内存泄露排查的一个案例

背景: 这熟悉的线条. 请求量没啥波动, 不用怀疑, 就是内存泄露了. 方案一 Valgrind Valgrind可以用来检测是否有非法使用内存的问题, 如: 访问未初始化的内存,访问数组越界, 忘记释放动态内存的问题; 首先需要定位是哪个进程的内存泄露. 使用top命令, 然后shiftm按照内存排序…

python 常用数据结构-字典

python 常用数据结构-字典 Dict 字典字典定义字典使用&#xff1a;创建字典使用&#xff1a;访问元素字典使用&#xff1a;操作元素字典使用&#xff1a;嵌套字典字典方法字典方法 keys()字典方法 values()字典方法 items()字典方法 get()字典方法 update()字典方法 pop() 字典…

十二、Docker Compose 介绍与安装

学习参考&#xff1a;尚硅谷Docker实战教程、Docker官网、其他优秀博客(参考过的在文章最后列出) 目录 前言一、docker compose介绍二、docker compose能干嘛三、docker compose安装与卸载3.1 docker-compose安装3.2 docker-compose卸载 总结 前言 在使用k8s之前&#xff0c;随…

overleaf 常用命令

ctrlb 加粗 ctrli 斜体 \emph 斜体&#xff0c;强调 行内公式 $ a b c $ 行间公式 \begin{equation} ab_cd \end{equation} 交叉引用 1.引入宏包 \usepackage[colorlinks]{hyperref} 2.\label \subsection{related wok}\label{sec:related work} this is related …

【开源分享】在线客服系统源码,支持发送文本表情,上传图片附件附详细搭建教程...

源码介绍 golang开发的单用户在线客服系统&#xff0c;功能非常的简洁实用&#xff0c;没有多余的功能。golang语言可编译为二进制程序&#xff0c;自带守护进程功能&#xff0c;相比于流传最广的PHP客服系统要稳定 环境配置 服务器&#xff1a;linux 或者 windows都可以 golan…

剑指offer36.二叉搜索树与双向链表

将二叉树转换成排序的双向循环链表&#xff0c;其中包含三个条件&#xff1a;1&#xff0c;排序&#xff1b;2&#xff0c;双向链表&#xff1b;3&#xff0c;循环链表&#xff1b; 条件1&#xff1a;将一个树排序很简单&#xff0c;采用“左-->根-->右”的中序遍历方式…

本地部署 ChatGLM2-6B

本地部署 ChatGLM2-6B 1. 什么是 ChatGLM2-6B2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 ChatGLM2-6B6. 启动 ChatGLM2-6B7. 访问 ChatGLM2-6B8. API部署9. OpenAI 格式的流式 API 部署10. 命令行部署11. ChatGLM2-6B 的推理参数含义 1. 什么是 ChatGLM2-6B Cha…

JS Node 模块化解释:AMD、UMD、CommonJS、 ESM

一、前言 传统方式下&#xff0c;JS 若想引入其它 JS 文件时&#xff0c;通常使用 <script> 语法来完成&#xff0c;然而引入的 JS 往往易于造成命名污染&#xff0c;为了解决这问题&#xff0c;模块化 开发的概念逐渐浮现。 本文将以完整的 Demo 将各大模块模块的概念…

树莓派(香橙派)交叉编译

目录 1、交叉编译是什么 2、为什么要交叉编译&#xff1f; 3、交叉编译需要用到什么工具&#xff1f; 4、&#xff08;香橙派&#xff09;交叉编译工具链的安装 5、 交叉编译服务端客户端 6、 带wiringPi库的交叉编译如何进行 1、交叉编译是什么 交叉编译是在一个平台上生…

叠加态和超级定位:量子世界的奇特现象

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在前几篇文章中&#xff0c;我们介绍了量子力学的起源、基本概念以及波函数作为描述量子世界的数学工具。今天&#xff0c;我们将深入探索量子力学中的奇特现象&#xff0c;包括叠加态和超级定位。 在量子力学中&…

sklearn高级功能

包括构造数据集、正则化、交叉验证 1.构造数据集 from sklearn import datasets import matplotlib.pyplot as plt #构造数据 #用函数来建立 100 个 sample&#xff0c;有一个 feature&#xff0c;和一个 target&#xff0c;这样比较方便可视化。 X, y datasets.make_regres…