Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

渲染世界扩展提交PR - RenderTheWorld.js - 嵌入渲染大更新 #269

Open
wants to merge 7 commits into
base: main
Choose a base branch
from

Conversation

xiaochen004hao
Copy link

@xiaochen004hao xiaochen004hao commented Jul 14, 2024

😎 渲染世界扩展

Scratch 3D扩展.

前言

原项目地址:

https://github.com/xiaochen004hao/RenderTheWorld/tree/main/src

PR项目地址:

#269

按照要求进行了更改 / 在背景角色之上创建了新的“层”,使其能够被画布和角色遮挡,功能性增加,兼容原版


正文


TOOD1: 设计目标!

众所周知,Scratch是全球少儿图形化编程工具(语言),其对于2d游戏简单且方便的制作功能深受广大用户的青睐。
但是,也仅此2d游戏而已,我们能否提升一个高度?编写3d游戏呢?
于是,基于这样的理想,渲染世界扩展诞生了

也许有人会问: 共创世界里不是有glsl、三扩展和高清画笔吗?这不能做3d吗?
可是,glsl对于“小孩子” 1 来说是在是很困难,而且也要从0开始,编写各种方法,十分繁琐。至于三扩展与高清画笔,同样得对于3d渲染有一定知识储备,并不面向“小孩子”

(对于极少数的“小天才” 2 来没什么问题,但我们的社区是面向“小天才”的吗?)

最后,总结一下此扩展的设计目标:开发出让3d创作更亲民,人人都能用得起的3d渲染库

TOOD2: 扩展积木的数量及他们的分类!

在gandi里加载此文件目录下的打包后的扩展,在积木栏自然能看见分类
截至至2024/5/25,积木总数一共有44个积木

TOOD3: 所有扩展积木的截图!

API文档(正在完善):https://learn.ccw.site/article/aa0cf6d0-6758-447a-96f5-8e5dfdbe14d6

TOOD4: 扩展的使用方式效果描述!

在此文件目录下有一个demo
在API文档里均有描述

结尾

同样重要!

若能荣幸的通过PR,请将这个扩展放在“开发中的扩展”里,因为这个扩展的积木类型可能会有“大改”
其次,求求了能不能在周六把要将的都讲完。。。3










Footnotes

  1. 新手scratcher,萌新

  2. 年轻的大佬,受尽“小孩子”膜拜

  3. 上学的时候看到各种意见却不能及时地改正/反馈,真的很无语。。。

@xiaochen004hao
Copy link
Author

@fath11 我已解决黑屏,鼠标扩展相机等问题

@MoreBugOfDog
Copy link
Contributor

A good extension!
According to @hcn. 's information in the Gandi developer community, we believe that such extensions should be released in the future' Extension Lab Plaza 'with a review mechanism, not this repo. The audit of this repo will be strengthened.
We look forward to expanding the experimental square with audit mechanism!

@xiaochen004hao
Copy link
Author

一个很好的扩展!根据 .在 Gandi 开发者社区中的信息,我们认为此类扩展应该在未来发布“扩展实验室广场”,并带有审核机制,而不是这个 reppo。将加强对本次回购的审计。我们期待用审计机制扩大实验广场!

额,所以,在这里还是能发的对吧

@fath11 fath11 mentioned this pull request Jul 30, 2024
@fath11
Copy link
Contributor

fath11 commented Aug 2, 2024

i think i remember you asking for a way to implement Inline blocks, this might be useful but i am not sure if its compatible with Gandi IDE https://ashimeealt.github.io/patch-generator/

@xiaochen004hao
Copy link
Author

i think i remember you asking for a way to implement Inline blocks, this might be useful but i am not sure if its compatible with Gandi IDE https://ashimeealt.github.io/patch-generator/

为什么我这里是404

@fath11
Copy link
Contributor

fath11 commented Aug 6, 2024

it's deleted…

Update RenderTheWorld.global.js - 很新的加载模型方式
@xiaochen004hao
Copy link
Author

it's deleted…

话说hcn什么时候才有空

@fath11
Copy link
Contributor

fath11 commented Aug 9, 2024

话说hcn什么时候才有空

should be on Friday

@MoreBugOfDog
Copy link
Contributor

Really looking forward to this extension going live~ (although it's been under review for a long time)

@FurryR
Copy link
Contributor

FurryR commented Oct 30, 2024

你的各种行为让我不太能忍受,但是我还是来审审你的扩展。以下是我发现的问题。

不尊重开源

**这是让我最生气的一点。**未在 README 中标注原脚手架信息可能导致版权问题。你对于 CST1229 使用的 patch 函数没有遵循原扩展的 MPL-2.0 开源协议,对于 lpp 组件的一些使用同样未遵循 LGPL-3.0 开源协议(LGPL-3.0 要求以同样协议分发修改的代码,而你使用了 MIT License,显然你没有尊重原作者的版权,在此提出强烈谴责)。

之前你在扩展集市发 lpp 组件的二次修改时我已经提出了抗议:

  1. lpp 是应我要求下架,你不应该搬运任何代码到 ccw,这是对原作者的不尊重。
  2. 我事先警告过你关于开源协议的事情,你却无视了这一点(没有去查搜索引擎也没有改正问题)。

可能在 ccw 那边说不够正式,那我直接在 github 说可能更能警醒你。

性能问题

RenderTheWorld 新建了一个 canvas 用于渲染,然而原来的 canvas 不仅同样会被渲染还持有一个 gl 上下文,我不能容忍这样做带来的性能问题。同时,它也不能够兼容 Scratch 的渲染机制。

不尊重 Scratch 设计

在代码中还出现了许多破坏 Scratch 时序机制的设计。首先,lpp 可以抄,但不能全抄。它在做一门新语言,你在做什么?代码中大量滥用 stepThread 的行为即使是 lpp 都要抽出一个 threadController 避免上下文被破坏,而你没有学到精髓就开抄,肯定会有跟 lpp 开发中一样的问题。

跟初衷完全背离

RenderTheWorld 仍然对小朋友不够友好,并且不可能对小朋友友好。首先,3D 涉及到的很多复杂问题(后处理、面剔除、碰撞检测、物理等)我们是不可避免的,而你更不能指望小朋友理解这些概念。

不遵循 KISS 原则

想要构建一个优秀且易用的扩展,就需要保证:

  1. 每个积木做到的功能最小,一个积木只做一件事。要完成复杂的功能,就要诱导用户搭积木,这是 Scratch 的初衷。
  2. 用良好的设计合并同类积木,如将设置、开关等合并到同一积木中
  3. 遵从自然语言的语序,而不是单纯的罗列参数。
  4. 积木不应与原版、其它扩展或自身的功能有部分重叠。可以制作一个完全重叠于一个功能的替代品。

RenderTheWorld 没有做到上面任何一个。

举个例子:
鼠标[YN]控制相机 是一个非常差的设计,因为它同时与 旋转相机获取鼠标位置 同时重叠,但又不是它们的完全替代品。
如果要重构这个设计,你可以:

  1. 让原版的获取鼠标坐标兼容 RenderTheWorld。
  2. 提供一个根据鼠标历史坐标和当前坐标计算灵敏度为1时,相机偏转的返回值积木。
  3. 用户可以根据需求,通过四则运算变更灵敏度,或者用它来干一些别的事情,而不是只拿来控制相机。

除此之外,还有一些类似于一次性返回全部数值来提高效率的建议,但这些就无关紧要了。

这不是 Scratch

以及最主要的一个问题——这样做就不是 Scratch 了。
常说“站在巨人的肩膀上”,但如果你想把 Scratch 做成一个用于设计 3D 游戏的语言,那么你应该自己设计一个 Scratch 的二开或者精神续作,类似于代码岛。
Simple 3D 是一个很好的不使用 Three.js 的做法,也可以进行一些学习。
我正在制作一个名为 GPU.js 的扩展,允许你用 Scratch 的子集编写 glsl 并在 GPU.js 上运行,这个改动我觉得相对于 RenderTheWorld 的力度来说是刚刚好的。

代码风格问题

我的脚手架有配 prettier 和 eslint,在提交前应该先过一遍,并修正所有问题。如果没有完成,请将 pull request 标记为 draft(草案)。


我看到你在学而思自称自己是“做扩展的大佬”,然而你强推并多次用来打扰我的 RenderTheWorld 存在数不清的问题,并不能随你愿进行合并;扩展抛开直接抄 lpp 编译后的代码的那一堆,本身并不能算得上创新与前卫,所以我很怀疑你的“大佬”一称是否正确。

lpp 在编写时大量参照了 scratch-vm 的实现细节,那么你是否也有去啃 scratch-vm 呢?还是说,你只是把代码抄过来,没有思考呢?

@kukemc
Copy link
Contributor

kukemc commented Oct 30, 2024

你的各种行为让我不太能忍受,但是我还是来审审你的扩展。以下是我发现的问题。

性能问题

RenderTheWorld 新建了一个 canvas 用于渲染,然而原来的 canvas 不仅同样会被渲染还持有一个 gl 上下文,我不能容忍这样做带来的性能问题。同时,它也不能够兼容 Scratch 的渲染机制。

不尊重 Scratch 设计

在代码中还出现了许多破坏 Scratch 时序机制的设计。首先,lpp 可以抄,但不能全抄。它在做一门新语言,你在做什么?代码中大量滥用 stepThread 的行为即使是 lpp 都要抽出一个 threadController 避免上下文被破坏,而你没有学到精髓就开抄,肯定会有跟 lpp 开发中一样的问题。

跟初衷完全背离

RenderTheWorld 仍然对小朋友不够友好,并且不可能对小朋友友好。首先,3D 涉及到的很多复杂问题(后处理、面剔除、碰撞检测、物理等)我们是不可避免的,而你更不能指望小朋友理解这些概念。

不遵循 KISS 原则

想要构建一个优秀且易用的扩展,就需要保证:

  1. 每个积木做到的功能最小,一个积木只做一件事。要完成复杂的功能,就要诱导用户搭积木,这是 Scratch 的初衷。
  2. 用良好的设计合并同类积木,如将设置、开关等合并到同一积木中
  3. 遵从自然语言的语序,而不是单纯的罗列参数。
  4. 积木不应与原版、其它扩展或自身的功能有部分重叠。可以制作一个完全重叠于一个功能的替代品。

RenderTheWorld 没有做到上面任何一个。

举个例子: 鼠标[YN]控制相机 是一个非常差的设计,因为它同时与 旋转相机获取鼠标位置 同时重叠,但又不是它们的完全替代品。 如果要重构这个设计,你可以:

  1. 让原版的获取鼠标坐标兼容 RenderTheWorld。
  2. 提供一个根据鼠标历史坐标和当前坐标计算灵敏度为1时,相机偏转的返回值积木。
  3. 用户可以根据需求,通过四则运算变更灵敏度,或者用它来干一些别的事情,而不是只拿来控制相机。

除此之外,还有一些类似于一次性返回全部数值来提高效率的建议,但这些就无关紧要了。

这不是 Scratch

以及最主要的一个问题——这样做就不是 Scratch 了。 常说“站在巨人的肩膀上”,但如果你想把 Scratch 做成一个用于设计 3D 游戏的语言,那么你应该自己设计一个 Scratch 的二开或者精神续作,类似于代码岛。 Simple 3D 是一个很好的不使用 Three.js 的做法,也可以进行一些学习。 我正在制作一个名为 GPU.js 的扩展,允许你用 Scratch 的子集编写 glsl 并在 GPU.js 上运行,这个改动我觉得相对于 RenderTheWorld 的力度来说是刚刚好的。

此小作文同时适用于 not.js, lpp, GPU.js

@kukemc
Copy link
Contributor

kukemc commented Oct 30, 2024

此外 在Gandi开发者群中公然辱骂一个新手制作的扩展不是一个好行为
image

@fath11
Copy link
Contributor

fath11 commented Oct 31, 2024

I don't know what is going on over at the CCW side of things, but I do have to agree that this extension is poorly designed.

  1. The code is too big to maintain over long period of time. It would be nice if blocks JSON data, extendable block code, SimpleSkin, I10n, and other util functions have it's own file.
  2. The extension doesn't utilize the scaffolding's ability to use NPM packages.
  3. The extension isn't design for game making. Game making covers almost all use cases for this extension and yet it's made for 3D showcase. If it were to be designed for game making, collision detection should be the utmost priority over 3d models import or even lighting.
  4. We have to admit that 3D is too complicated and having one extension to do it all is unreasonable. At some point if we want more 3D capabilities, this extension has to split up and it needs to be ready for that. This is also my thought process behind BetterQuake. Webgl stuff is just as complicated as 3D stuff so it needs to be managed properly.

I myself is planning to make a 3d extension that uses BetterQuake and Three.js for rendering with the same design principle as CST3D as it is proven to be a good design for beginners.

@fath11
Copy link
Contributor

fath11 commented Oct 31, 2024

At some point if we want more 3D capabilities, this extension has to split up

If we want to solely focus on beginner friendliness, this point is valid because we don't want them to feel overwhelmed with hundreds of blocks. Otherwise, the 4th point I made is invalid.

@xiaochen004hao
Copy link
Author

(怎么两周前这里突然炸了呢)

@xiaochen004hao
Copy link
Author

你的各种行为让我不太能忍受,但是我还是来审审你的扩展。以下是我发现的问题。

不尊重开源

**这是让我最生气的一点。**未在 README 中标注原脚手架信息可能导致版权问题。你对于 CST1229 使用的 patch 函数没有遵循原扩展的 MPL-2.0 开源协议,对于 lpp 组件的一些使用同样未遵循 LGPL-3.0 开源协议(LGPL-3.0 要求以同样协议分发修改的代码,而你使用了 MIT License,显然你没有尊重原作者的版权,在此提出强烈谴责)。

之前你在扩展集市发 lpp 组件的二次修改时我已经提出了抗议:

  1. lpp 是应我要求下架,你不应该搬运任何代码到 ccw,这是对原作者的不尊重。
  2. 我事先警告过你关于开源协议的事情,你却无视了这一点(没有去查搜索引擎也没有改正问题)。

可能在 ccw 那边说不够正式,那我直接在 github 说可能更能警醒你。

性能问题

RenderTheWorld 新建了一个 canvas 用于渲染,然而原来的 canvas 不仅同样会被渲染还持有一个 gl 上下文,我不能容忍这样做带来的性能问题。同时,它也不能够兼容 Scratch 的渲染机制。

不尊重 Scratch 设计

在代码中还出现了许多破坏 Scratch 时序机制的设计。首先,lpp 可以抄,但不能全抄。它在做一门新语言,你在做什么?代码中大量滥用 stepThread 的行为即使是 lpp 都要抽出一个 threadController 避免上下文被破坏,而你没有学到精髓就开抄,肯定会有跟 lpp 开发中一样的问题。

跟初衷完全背离

RenderTheWorld 仍然对小朋友不够友好,并且不可能对小朋友友好。首先,3D 涉及到的很多复杂问题(后处理、面剔除、碰撞检测、物理等)我们是不可避免的,而你更不能指望小朋友理解这些概念。

不遵循 KISS 原则

想要构建一个优秀且易用的扩展,就需要保证:

  1. 每个积木做到的功能最小,一个积木只做一件事。要完成复杂的功能,就要诱导用户搭积木,这是 Scratch 的初衷。
  2. 用良好的设计合并同类积木,如将设置、开关等合并到同一积木中
  3. 遵从自然语言的语序,而不是单纯的罗列参数。
  4. 积木不应与原版、其它扩展或自身的功能有部分重叠。可以制作一个完全重叠于一个功能的替代品。

RenderTheWorld 没有做到上面任何一个。

举个例子: 鼠标[YN]控制相机 是一个非常差的设计,因为它同时与 旋转相机获取鼠标位置 同时重叠,但又不是它们的完全替代品。 如果要重构这个设计,你可以:

  1. 让原版的获取鼠标坐标兼容 RenderTheWorld。
  2. 提供一个根据鼠标历史坐标和当前坐标计算灵敏度为1时,相机偏转的返回值积木。
  3. 用户可以根据需求,通过四则运算变更灵敏度,或者用它来干一些别的事情,而不是只拿来控制相机。

除此之外,还有一些类似于一次性返回全部数值来提高效率的建议,但这些就无关紧要了。

这不是 Scratch

以及最主要的一个问题——这样做就不是 Scratch 了。 常说“站在巨人的肩膀上”,但如果你想把 Scratch 做成一个用于设计 3D 游戏的语言,那么你应该自己设计一个 Scratch 的二开或者精神续作,类似于代码岛。 Simple 3D 是一个很好的不使用 Three.js 的做法,也可以进行一些学习。 我正在制作一个名为 GPU.js 的扩展,允许你用 Scratch 的子集编写 glsl 并在 GPU.js 上运行,这个改动我觉得相对于 RenderTheWorld 的力度来说是刚刚好的。

代码风格问题

我的脚手架有配 prettier 和 eslint,在提交前应该先过一遍,并修正所有问题。如果没有完成,请将 pull request 标记为 draft(草案)。

我看到你在学而思自称自己是“做扩展的大佬”,然而你强推并多次用来打扰我的 RenderTheWorld 存在数不清的问题,并不能随你愿进行合并;扩展抛开直接抄 lpp 编译后的代码的那一堆,本身并不能算得上创新与前卫,所以我很怀疑你的“大佬”一称是否正确。

lpp 在编写时大量参照了 scratch-vm 的实现细节,那么你是否也有去啃 scratch-vm 呢?还是说,你只是把代码抄过来,没有思考呢?

我最近真的没时间,如果有的话,我会尝试对其进行重写,并在完成时提交新的PR,会重新审视有关开源协议的问题,同时,我有去啃scratch-vm,但我的代码阅读能力还有待提高(我本地的项目结构真的乱七八糟。。。)
在我完善相关内容前不会在github更新项目了,但会在ccw的扩展集市上更新,以测试扩展在详情页(就是www.ccw.site/detail/)会不会有bug。
对于“大佬”,这是相对于zheng class来说的,因为我认为对于他,我对scratch扩展的认识和细节是比他丰富的,当然对于你这样的知识储备,我还是太肤浅了。
届时,我会尝试自己独立编写相关功能的实现。

问一下,在PR提交原项目目录(我在重写后可能会有十几个文件),而不是打包后的文件(像这里的),可行吗?

最后感谢你的评论

@xiaochen004hao
Copy link
Author

我不知道 CCW 方面发生了什么,但我不得不同意这个扩展设计得很糟糕。

  1. 代码太大,无法长时间维护。如果块 JSON 数据、可扩展块代码、SimpleSkin、I10n 和其他 util 函数有自己的文件,那就太好了。
  2. 该扩展没有利用基架使用 NPM 包的能力。
  3. 该扩展不是为游戏制作而设计的。游戏制作几乎涵盖了此扩展的所有用例,但它是为 3D 展示而设计的。如果它是为游戏制作而设计的,那么碰撞检测应该是比 3D 模型导入甚至照明更优先的。
  4. 我们不得不承认 3D 太复杂了,用一个扩展来完成所有工作是不合理的。在某些时候,如果我们想要更多的 3D 功能,这个扩展必须拆分,并且需要为此做好准备。这也是我背后的 BetterQuake 思考过程。Webgl 的东西和 3D 的东西一样复杂,所以需要适当地管理它。

我自己正计划制作一个 3d 扩展,它使用 BetterQuake 和 Three.js 进行渲染,其设计原理与 CST3D 相同,因为它被证明是适合初学者的好设计。

冒昧地问一下,CST3D是什么,能给出相关链接吗
如果可行的话,我是不是应该放弃这个扩展项目?(这个扩展在诞生的时候我是抱着学习的目的编写的,其实在我的脑子里,还有另一个方面的构思有待实现)

@xiaochen004hao
Copy link
Author

此外 在Gandi开发者群中公然辱骂一个新手制作的扩展不是一个好行为 图像

看来在我备期中考试的时候发生了很多事情🤔🤔🤔
不过看上去你们并不是很欢迎凌,(实话说我在各个社区看见了很多凌的传说,有好有坏,谁能告诉我发生了啥)虽然他说话很冲,但是。。。好吧没有但是了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants