2 Commits

485 changed files with 27316 additions and 52266 deletions

1
.gitignore vendored
View File

@@ -14,7 +14,6 @@
*.pch
*.sbr
build/
build_debug/
Build/
bin/
Debug/

251
AGENTS.md
View File

@@ -1,251 +0,0 @@
# Code Modification Guidelines
## 1. Git Branch Protection
- Never modify code directly on the `main` branch.
- Before editing, check the current branch:
```bash
git branch --show-current
````
* If the result is `main`, create or switch to a development branch first:
```bash
git checkout -b feature/xxx
```
* Do not bypass branch protection by:
* Committing directly to `main`.
* Running code generation, formatting, or large refactors on `main`.
* Rewriting or damaging `main` history.
---
## 2. Code Comments
* All new comments must be written in English.
* Comments must be:
* Short and clear.
* Explain the purpose, not repeat the code.
* Avoid unnecessary details.
Recommended:
```cpp
// AI-generated: Prevent stale handle access.
```
Avoid:
```cpp
// AI-generated: This checks if the handle is invalid because...
```
* Important AI-added or modified logic should include:
```cpp
// AI-generated
```
* Do not add comments for trivial changes such as:
* One or two line logic fixes.
* Spelling corrections.
* Simple variable renames.
### 2.1 Do not write excessive or granular comments
AI must avoid sprinkling small explanatory comments throughout code.
Specifically:
* **No line-by-line narration.** Do not add a comment above (or beside)
every field, signal, slot, branch, or block just to restate what it is.
If the name is self-explanatory, no comment is needed.
* **No multi-part explanations on a single marker.** A line like
`// AI-generated: abort the in-flight download; finished handler clears state.`
is too much. Either drop it, or shorten to a single short clause
(e.g. `// AI-generated: abort in-flight download.`).
* **Prefer zero or one comment per file/section**, not many. A short
header comment explaining the file's purpose is acceptable; dozens of
inline labels are not.
* **Do not comment obvious QML/C++ bindings, layout splits, or default
values** (e.g. `// AI-generated: index 0 -> zh_CN, index 1 -> en.`).
The code already says that.
* **When in doubt, omit the comment.** A missing comment is fine; a
redundant one is noise that future maintainers must clean up.
Rule of thumb: if removing the comment would not lose useful
information, remove it.
---
## 3. Project Style
Follow the existing project style strictly:
* Naming conventions.
* File organization.
* Formatting rules.
* Include order.
* Existing architecture.
Do not:
* Introduce unrelated coding styles.
* Add unnecessary design patterns.
* Create duplicate systems.
* Add abstractions without need.
* Change module responsibilities.
---
## 4. Modification Scope
Only modify the minimum code required.
Do not:
* Format unrelated files.
* Remove existing comments.
* Rename large numbers of symbols.
* Change public APIs.
* Perform large refactors without confirmation.
If large changes are required, explain first:
1. Current problem.
2. Required changes.
3. Affected modules.
4. Expected impact.
---
## 5. Build and Test
After modifications:
* Verify compilation.
* Check for new warnings.
* Ensure existing features still work.
Do not:
* Commit without verification.
* Ignore compiler errors.
* Hide problems with temporary hacks.
---
## 6. Compatibility
Consider:
* Existing callers.
* API/ABI compatibility.
* Serialization formats.
* Network protocols.
* Save data.
* Threading impact.
Do not:
* Change network structures without compatibility handling.
* Break old data formats.
* Change public data layouts carelessly.
---
## 7. Multi-threading Safety
For multi-threaded code, check:
* Data races.
* Object lifetime.
* Lock contention.
* Atomic correctness.
* Cross-thread resource access.
Do not:
* Assume single-threaded execution.
* Modify shared data without protection.
* Add hidden locks that hurt performance.
---
## 8. Memory Safety
Consider:
* Ownership.
* Lifetime.
* RAII.
* Memory leaks.
* Dangling references.
* Iterator invalidation.
Do not:
* Return references to local variables.
* Store pointers to temporary objects.
* Use uninitialized data.
* Introduce undefined behavior.
---
## 9. Third-party Libraries
Before adding or changing dependencies:
Check:
* Existing project dependencies.
* Build system impact.
* Maintenance cost.
Do not:
* Add large libraries for simple features.
* Duplicate existing library functionality.
* Modify third-party source code.
---
## 10. AI Behavior Rules
AI-generated code must:
* Reuse existing code first.
* Preserve current architecture.
* Prefer simple solutions.
* Minimize risk and code changes.
Do not:
* Guess requirements.
* Add unrequested features.
* Redesign architecture.
* Add unnecessary abstraction layers.
Choose the implementation with:
> The smallest change, lowest risk, and best compatibility with existing code.
---
## 11. Pre-commit Checklist
Before committing:
* [ ] Not on `main`.
* [ ] Changes match the requested task.
* [ ] New comments are in English.
* [ ] AI changes are marked when needed.
* [ ] No unrelated formatting changes.
* [ ] Build passes.
* [ ] No obvious performance/security/thread issues.
* [ ] No API, protocol, or data format breakage.

View File

@@ -1,14 +0,0 @@
{
"name": "air",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": true,
"is_passable": true,
"is_discard": true,
"is_blend": false,
"is_transitional": false,
"is_gas": true,
"roughness": 1.0
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "dirt",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": false,
"is_passable": false,
"is_discard": false,
"is_blend": false,
"is_transitional": true,
"is_gas": false,
"roughness": 1.0
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/dirt",
"normal": "cubed:normals/blocks/dirt"
},
"sounds": {
"break": "cubed:sounds/blocks/dirt/break.ogg",
"place": "cubed:sounds/blocks/dirt/place.ogg",
"walk": "cubed:sounds/blocks/dirt/walk.ogg"
}
}

View File

@@ -1,22 +0,0 @@
{
"name": "grass",
"properties": {
"is_liquid": false,
"is_cross_plane": true,
"is_transparent": true,
"is_passable": true,
"is_discard": true,
"is_blend": false,
"is_transitional": false,
"is_gas": false,
"roughness": 0.9
},
"texture": {
"type": "cross",
"path": "cubed:textures/blocks/grass"
},
"sounds": {
"break": "cubed:sounds/blocks/grass/break.ogg",
"place": "cubed:sounds/blocks/grass/place.ogg"
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "grass_block",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": false,
"is_passable": false,
"is_discard": false,
"is_blend": false,
"is_transitional": true,
"is_gas": false,
"roughness": 0.9
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/grass_block",
"normal": "cubed:normals/blocks/grass_block"
},
"sounds": {
"break": "cubed:sounds/blocks/grass_block/break.ogg",
"place": "cubed:sounds/blocks/grass_block/place.ogg",
"walk": "cubed:sounds/blocks/grass_block/walk.ogg"
}
}

View File

@@ -1,23 +0,0 @@
{
"name": "leaf",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": true,
"is_passable": false,
"is_discard": true,
"is_blend": false,
"is_transitional": false,
"is_gas": false,
"roughness": 0.7
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/leaf"
},
"sounds": {
"break": "cubed:sounds/blocks/leaf/break.ogg",
"place": "cubed:sounds/blocks/leaf/place.ogg",
"walk": "cubed:sounds/blocks/leaf/walk.ogg"
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "log",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": false,
"is_passable": false,
"is_discard": false,
"is_blend": false,
"is_transitional": false,
"is_gas": false,
"roughness": 0.7
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/log",
"normal": "cubed:normals/blocks/log"
},
"sounds": {
"break": "cubed:sounds/blocks/log/break.ogg",
"place": "cubed:sounds/blocks/log/place.ogg",
"walk": "cubed:sounds/blocks/log/walk.ogg"
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "sand",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": false,
"is_passable": false,
"is_discard": false,
"is_blend": false,
"is_transitional": true,
"is_gas": false,
"roughness": 0.8
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/sand",
"normal": "cubed:normals/blocks/sand"
},
"sounds": {
"break": "cubed:sounds/blocks/sand/break.ogg",
"place": "cubed:sounds/blocks/sand/place.ogg",
"walk": "cubed:sounds/blocks/sand/walk.ogg"
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "snowy_grass_block",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": false,
"is_passable": false,
"is_discard": false,
"is_blend": false,
"is_transitional": true,
"is_gas": false,
"roughness": 0.9
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/snowy_grass_block",
"normal": "cubed:normals/blocks/snowy_grass_block"
},
"sounds": {
"break": "cubed:sounds/blocks/snowy_grass_block/break.ogg",
"place": "cubed:sounds/blocks/snowy_grass_block/place.ogg",
"walk": "cubed:sounds/blocks/snowy_grass_block/walk.ogg"
}
}

View File

@@ -1,24 +0,0 @@
{
"name": "stone",
"properties": {
"is_liquid": false,
"is_cross_plane": false,
"is_transparent": false,
"is_passable": false,
"is_discard": false,
"is_blend": false,
"is_transitional": true,
"is_gas": false,
"roughness": 0.75
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/stone",
"normal": "cubed:normals/blocks/stone"
},
"sounds": {
"break": "cubed:sounds/blocks/stone/break.ogg",
"place": "cubed:sounds/blocks/stone/place.ogg",
"walk": "cubed:sounds/blocks/stone/walk.ogg"
}
}

View File

@@ -1,18 +0,0 @@
{
"name": "water",
"properties": {
"is_liquid": true,
"is_cross_plane": false,
"is_transparent": true,
"is_passable": true,
"is_discard": false,
"is_blend": true,
"is_transitional": false,
"is_gas": false,
"roughness": 0.02
},
"texture": {
"type": "cuboid",
"path": "cubed:textures/blocks/water"
}
}

View File

@@ -1,6 +0,0 @@
{
"name": "pig",
"model": "cubed:models/creatures/pig/pig.glb",
"animation": "cubed:models/creatures/pig/animation.json",
"collision": "cubed:models/creatures/pig/collision.json"
}

View File

@@ -1,5 +0,0 @@
{
"name": "player",
"model": "cubed:models/creatures/player/player.glb",
"collision": "cubed:models/creatures/player/collision.json"
}

View File

@@ -1,7 +0,0 @@
{
"name": "air",
"type": "block",
"block": "cubed:air",
"texture": "cubed:textures/items/block/air.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "dirt",
"type": "block",
"block": "cubed:dirt",
"texture": "cubed:textures/items/block/dirt.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "grass",
"type": "block",
"block": "cubed:grass",
"texture": "cubed:textures/items/block/grass.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "grass_block",
"type": "block",
"block": "cubed:grass_block",
"texture": "cubed:textures/items/block/grass_block.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "leaf",
"type": "block",
"block": "cubed:leaf",
"texture": "cubed:textures/items/block/leaf.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "log",
"type": "block",
"block": "cubed:log",
"texture": "cubed:textures/items/block/log.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "pig_spawn_egg",
"type": "spawn_egg",
"creature": "cubed:pig",
"texture": "cubed:textures/items/spawn_egg/pig_spawn_egg.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "sand",
"type": "block",
"block": "cubed:sand",
"texture": "cubed:textures/items/block/sand.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "snowy_grass_block",
"type": "block",
"block": "cubed:snowy_grass_block",
"texture": "cubed:textures/items/block/snowy_grass_block.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "stone",
"type": "block",
"block": "cubed:stone",
"texture": "cubed:textures/items/block/stone.png",
"description": ""
}

View File

@@ -1,7 +0,0 @@
{
"name": "water",
"type": "block",
"block": "cubed:water",
"texture": "cubed:textures/items/block/water.png",
"description": ""
}

View File

@@ -1,33 +0,0 @@
{
"walk": {
"speed": 6.0,
"amplitude": 25.0
},
"run": {
"speed": 12.0,
"amplitude": 40.0
},
"body_bob": 0.03,
"head": {
"node": "Head",
"amplitude": 4.0
},
"legs": [
{
"node": "Foot_FL",
"phase": 0.0
},
{
"node": "Foot_FR",
"phase": 3.14159
},
{
"node": "Foot_HL",
"phase": 3.14159
},
{
"node": "Foot_HR",
"phase": 0.0
}
]
}

View File

@@ -1,16 +0,0 @@
{
"boxes": [
{
"center": [
0,
0.78,
0
],
"half": [
0.53,
0.78,
0.406
]
}
]
}

View File

@@ -1,16 +0,0 @@
{
"boxes": [
{
"center": [
0,
0.9,
0
],
"half": [
0.3,
0.9,
0.3
]
}
]
}

View File

@@ -1,27 +0,0 @@
{
"blocks": {
"air": 0,
"grass_block": 1,
"dirt": 2,
"stone": 3,
"sand": 4,
"log": 5,
"leaf": 6,
"water": 7,
"snowy_grass_block": 8,
"grass": 9
},
"items": {
"air": 0,
"grass_block": 1,
"dirt": 2,
"stone": 3,
"sand": 4,
"log": 5,
"leaf": 6,
"water": 7,
"snowy_grass_block": 8,
"grass": 9,
"pig_spawn_egg": 10
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 B

View File

@@ -0,0 +1,12 @@
id = 0
is_blend = false
is_cross_plane = false
is_discard = true
is_gas = true
is_liquid = false
is_passable = true
is_transitional = false
is_transparent = true
name = 'air'
name_key = 'block.air'
roughness = 1.0

View File

@@ -0,0 +1,12 @@
id = 2
is_blend = false
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = false
is_passable = false
is_transitional = true
is_transparent = false
name = 'dirt'
name_key = 'block.dirt'
roughness = 1.0

View File

@@ -0,0 +1,12 @@
id = 9
is_blend = false
is_cross_plane = true
is_discard = true
is_gas = false
is_liquid = false
is_passable = true
is_transitional = false
is_transparent = true
name = 'grass'
name_key = 'block.grass'
roughness = 0.90000000000000002

View File

@@ -0,0 +1,12 @@
id = 1
is_blend = false
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = false
is_passable = false
is_transitional = true
is_transparent = false
name = 'grass_block'
name_key = 'block.grass_block'
roughness = 0.90000000000000002

View File

@@ -0,0 +1,12 @@
id = 6
is_blend = false
is_cross_plane = false
is_discard = true
is_gas = false
is_liquid = false
is_passable = false
is_transitional = false
is_transparent = true
name = 'leaf'
name_key = 'block.leaf'
roughness = 0.69999999999999996

View File

@@ -0,0 +1,12 @@
id = 5
is_blend = false
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = false
is_passable = false
is_transitional = false
is_transparent = false
name = 'log'
name_key = 'block.log'
roughness = 0.69999999999999996

View File

@@ -0,0 +1,12 @@
id = 4
is_blend = false
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = false
is_passable = false
is_transitional = true
is_transparent = false
name = 'sand'
name_key = 'block.sand'
roughness = 0.80000000000000004

View File

@@ -0,0 +1,12 @@
id = 8
is_blend = false
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = false
is_passable = false
is_transitional = true
is_transparent = false
name = 'snowy_grass_block'
name_key = 'block.snowy_grass_block'
roughness = 0.90000000000000002

View File

@@ -0,0 +1,12 @@
id = 3
is_blend = false
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = false
is_passable = false
is_transitional = true
is_transparent = false
name = 'stone'
name_key = 'block.stone'
roughness = 0.75

View File

@@ -0,0 +1,12 @@
name = "template"
id = 0
is_liquid = false
is_gas = false
is_passable = false
is_cross_plane = false
is_transparent = false
is_discard = false
is_blend = false
is_transitional = false
roughness = 1.0
name_key = "block.template"

View File

@@ -0,0 +1,12 @@
id = 7
is_blend = true
is_cross_plane = false
is_discard = false
is_gas = false
is_liquid = true
is_passable = true
is_transitional = false
is_transparent = true
name = 'water'
name_key = 'block.water'
roughness = 0.02

View File

@@ -4,7 +4,6 @@
"menu.main.join_game": "Join Game",
"menu.main.credits": "Credits",
"menu.main.quit": "Quit",
"menu.screenshot": "Screenshots",
"menu.main.player_name": "Player: {name}",
"menu.main.cubed_version": "Cubed: {version}",
"menu.pause.pause_menu": "Pause Menu",
@@ -37,20 +36,14 @@
"joingame.server_ip": "Server Ip",
"joingame.join_world": "Join World",
"error.disable_voice": "Server Disable Voice Chat",
"item.cubed.air.name": "air",
"item.cubed.dirt.name": "dirt",
"item.cubed.grass_block.name": "grass block",
"item.cubed.grass.name": "grass",
"item.cubed.leaf.name": "leaf",
"item.cubed.log.name": "log",
"item.cubed.sand.name": "sand",
"item.cubed.snowy_grass_block.name": "snowy grass block",
"item.cubed.stone.name": "stone",
"item.cubed.water.name": "water",
"item.cubed.pig_spawn_egg.name": "pig spawn egg",
"screenshot.no_screenshot": "No Screenshot",
"button.show_in_file_manager": "Show In File Manager",
"file.sort_type": "File Sort Type: {type}",
"file.newest_first": "Newest First",
"file.oldest_first": "Oldest First"
"block.air": "air",
"block.dirt": "dirt",
"block.grass_block": "grass block",
"block.grass": "grass",
"block.leaf": "leaf",
"block.log": "log",
"block.sand": "sand",
"block.snowy_grass_block": "snowy grass block",
"block.stone": "stone",
"block.water": "water"
}

View File

@@ -4,7 +4,6 @@
"menu.main.join_game": "加入游戏",
"menu.main.credits": "制作人员",
"menu.main.quit": "退出",
"menu.screenshot": "屏幕截图",
"menu.main.player_name": "玩家:{name}",
"menu.main.cubed_version": "Cubed{version}",
"menu.pause.pause_menu": "暂停菜单",
@@ -37,20 +36,14 @@
"joingame.server_ip": "服务器IP",
"joingame.join_world": "加入世界",
"error.disable_voice": "服务器已禁用语音聊天",
"item.cubed.air.name": "空气",
"item.cubed.dirt.name": "泥土",
"item.cubed.grass_block.name": "草方块",
"item.cubed.grass.name": "草",
"item.cubed.leaf.name": "树叶",
"item.cubed.log.name": "原木",
"item.cubed.sand.name": "沙子",
"item.cubed.snowy_grass_block.name": "覆雪草方块",
"item.cubed.stone.name": "石头",
"item.cubed.water.name": "水",
"item.cubed.pig_spawn_egg.name": "猪猪刷怪蛋",
"screenshot.no_screenshot": "没有截图",
"button.show_in_file_manager": "在文件管理器中显示",
"file.sort_type": "文件排序方式:{type}",
"file.newest_first": "最新在前",
"file.oldest_first": "最旧在前"
"block.air": "空气",
"block.dirt": "泥土",
"block.grass_block": "草方块",
"block.grass": "草",
"block.leaf": "树叶",
"block.log": "原木",
"block.sand": "沙子",
"block.snowy_grass_block": "覆雪草方块",
"block.stone": "石头",
"block.water": "水"
}

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 955 B

After

Width:  |  Height:  |  Size: 955 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 955 B

After

Width:  |  Height:  |  Size: 955 B

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,13 +0,0 @@
#version 460
layout (location = 0) in vec3 pos;
layout (location = 1) in vec2 texCoord;
layout (location = 3) in mat4 modelMatrix;
uniform mat4 lightSpaceMatrix;
out vec2 tc;
void main() {
tc = texCoord;
gl_Position = lightSpaceMatrix * modelMatrix * vec4(pos, 1.0);
}

View File

@@ -1,14 +0,0 @@
#version 460
layout (location = 0) in vec3 pos;
layout (location = 1) in vec2 texCoord;
uniform mat4 lightSpaceMatrix;
uniform mat4 modelMatrix;
out vec2 tc;
void main() {
tc = texCoord;
gl_Position = lightSpaceMatrix * modelMatrix * vec4(pos, 1.0);
}

View File

@@ -7,6 +7,7 @@ uniform mat4 lightSpaceMatrix;
uniform mat4 modelMatrix;
out vec2 tc;
flat out int tex_layer;
void main() {
tc = texCoord;

View File

@@ -3,45 +3,13 @@
in vec2 tc;
in vec3 normal;
in vec3 vert_pos;
in vec4 FragPosLightSpace;
out vec4 color;
layout (binding = 0) uniform sampler2D shadowMap;
layout (binding = 1) uniform sampler2D samp;
layout (binding = 0) uniform sampler2D samp;
uniform float ambientStrength;
uniform vec3 sunlightColor;
uniform vec3 ambientColor;
uniform vec3 sunlightDir;
uniform bool shader_on;
uniform int shadowMode;
uniform float lightSizeUV;
uniform float minRadius;
uniform float maxRadius;
#include "shadow.glsl"
void main() {
vec4 objectColor = texture(samp, tc);
color = texture(samp, tc);
if (!shader_on) {
color = objectColor;
return;
}
vec3 lightDir = normalize(-sunlightDir);
vec3 norm = normalize(normal);
vec3 ambient = ambientStrength * ambientColor;
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = diff * sunlightColor;
float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir);
//float shadow = 0.0;
//color = vec4(vec3(shadow),1);
//color = vec4(vec3(diff),1);
color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb, objectColor.a);
}

View File

@@ -6,21 +6,17 @@ layout (location = 2) in vec3 aNormal;
uniform mat4 mv_matrix;
uniform mat4 proj_matrix;
uniform mat4 norm_matrix;
uniform mat4 lightSpaceMatrix;
uniform mat4 modelMatrix;
out vec4 FragPosLightSpace;
out vec3 normal;
out vec2 tc;
out vec3 vert_pos;
void main() {
vec4 worldPos = modelMatrix * vec4(pos, 1.0);
FragPosLightSpace = lightSpaceMatrix * worldPos;
//vec4 worldPos = modelMatrix * vec4(pos, 1.0);
vec4 viewPos = mv_matrix * vec4(pos, 1.0);
tc = texCoord;
vert_pos = pos;
normal = normalize(mat3(norm_matrix) * aNormal);
//normal = normalize(mat3(norm_matrix) * aNormal);
gl_Position = proj_matrix * viewPos;
}

View File

@@ -0,0 +1,47 @@
#version 460
in vec2 tc;
in vec3 normal;
in vec3 vert_pos;
in vec4 FragPosLightSpace;
out vec4 color;
layout (binding = 0) uniform sampler2D shadowMap;
layout (binding = 1) uniform sampler2D samp;
uniform float ambientStrength;
uniform vec3 sunlightColor;
uniform vec3 ambientColor;
uniform vec3 sunlightDir;
uniform bool shader_on;
uniform int shadowMode;
uniform float lightSizeUV;
uniform float minRadius;
uniform float maxRadius;
#include "shadow.glsl"
void main() {
vec4 objectColor = texture(samp, tc);
if (!shader_on) {
color = objectColor;
return;
}
vec3 lightDir = normalize(-sunlightDir);
vec3 norm = normalize(normal);
vec3 ambient = ambientStrength * ambientColor;
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = diff * sunlightColor;
float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir);
//float shadow = 0.0;
//color = vec4(vec3(shadow),1);
//color = vec4(vec3(diff),1);
color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb, objectColor.a);
}

View File

@@ -3,10 +3,13 @@
layout (location = 0) in vec3 pos;
layout (location = 1) in vec2 texCoord;
layout (location = 2) in vec3 aNormal;
layout (location = 3) in mat4 modelMatrix;
uniform mat4 view_matrix;
layout (location = 3) in vec3 aTangent;
uniform mat4 mv_matrix;
uniform mat4 proj_matrix;
uniform mat4 norm_matrix;
uniform mat4 lightSpaceMatrix;
uniform mat4 modelMatrix;
out vec4 FragPosLightSpace;
out vec3 normal;
out vec2 tc;
@@ -16,8 +19,6 @@ out vec3 vert_pos;
void main() {
vec4 worldPos = modelMatrix * vec4(pos, 1.0);
FragPosLightSpace = lightSpaceMatrix * worldPos;
mat4 mv_matrix= view_matrix * modelMatrix;
mat4 norm_matrix = transpose(inverse(mv_matrix));
vec4 viewPos = mv_matrix * vec4(pos, 1.0);
tc = texCoord;
vert_pos = pos;

Some files were not shown because too many files have changed in this diff Show More