Hazel引擎学习笔记

我感觉自己照抄视频中的脚本还是有点慢了

创建github仓库

创建VisualStudio空项目

在sln文件的目录下gitclone仓库

现在我们的解决方案中只有Engine一个项目

配置管理器-项目上下文-平台-编辑中删去Win32

在Engine项目的属性页配置改为所有配置

在Engine项目的属性页-配置属性-常规-常规属性-配置类型改为dll

现在这个项目会构建成dll而不是exe

在Engine项目的属性页-配置属性-常规-常规属性-输出目录改为$(SolutionDir)bin\$(Configuration)-$(Platform)\$(ProjectName)\

中间目录改为$(SolutionDir)bin-int\$(Configuration)-$(Platform)\$(ProjectName)\

这就表示bin-int是一个可以随时删除的文件夹

这就链接到了Engine项目产生的dll

在两个项目下创建src文件夹

在Engine项目下面新建一个测试用的

Test.h

#pragmaoncenamespaceMeowEngine{__declspec(dllexport)voidPrint();}Test.cpp

然后在Sandbox里面创建

Application.cpp

在Engine的src文件夹中新建一个Engine文件夹

创建Application类

#pragmaonce#ifdefME_PLATFORM_WINDOWS#ifdefME_BUILD_DLL#defineME_API__declspec(dllexport)#else#defineME_API__declspec(dllimport)#endif//ME_BUILD_DLL#else#errorMeowEngineonlysupportWindows!#endifME_PLATFORM_WINDOWS表示对Windows构建

通过ME_BUILD_DLL我们实现了使用一个ME_API就能处理dll的导入导出

之前定义的Application类中declspec也可以替换成ME_API了

对Sandbox同样如此

对Engine再添加一个预处理器ME_BUILD_DLL表示这是用来构建dll的项目

把Sandbox的Application.cpp改名为SandboxApp.cpp与Engine中的Application.cpp区分开

在Engine项目的src文件夹中创建一个头文件作为中介

MeowEngine.h

也就是添加了Engine中的一个路径

SandboxApp.cpp

还是得看之后写了什么吧

之后它把main函数的位置改了

他在Engine项目的src/Engine下面创建了一个EntryPoint.h把main放到了这里

Log.h

platforms的作用相当于另一种configurations只是方便之后区别不同情况

define是定义一个preprocessor预编译头

就是之前ME_PLATFORM_WINDOWS之类

kind表示构建类型

language表示构建语言

targetdir表示构建位置

objdir设置构建项目时应放置对象和其他中间文件的目录。

include表示附加的头文件目录

具体有哪些内建变量可以看wiki

之后的

讲的还挺清楚的

AsthisisaDLL,theproblemmightlieindifferentheapsusedforallocationanddeallocation(trytobuildthelibrarystaticallyandcheckifthatwillwork).Theproblemis,thatDLLsandtemplatesdonotagreetogetherverywell.Ingeneral,dependingonthelinkageoftheMSVCruntime,itmightbeproblemifthememoryisallocatedintheexecutableanddeallocatedintheDLLandviceversa(becausetheymighthavedifferentheaps).Andthatcanhappenwithtemplatesveryeasily,forexample:youpush_back()tothevectorinsidetheremoveWhiteSpaces()intheDLL,sothevectormemoryisallocatedinsidetheDLL.Thenyouusetheoutputvectorintheexecutableandonceitgetsoutofscope,itisdeallocated,butinsidetheexecutablewhoseheapdoesn’tknowanythingabouttheheapithasbeenallocatedfrom.Bang,you’redead.

那么需要设置VS中的RuntimeLibrary选项

/MTMulti-threaded/MTdMulti-threadedDebug/MDMulti-threadedDLL/MDdMulti-threadedDebugDLL用带DLL的选项就可以了

最终我遇到了类似这样的问题

这里返回的类型实际上是一个enum变量

而每一个函数对这个虚函数的继承都需要根据自己的情况来重写一遍

那么我们用一个宏定义来实现继承虚函数返回自己的类型enum的这一步

gitsubmoduleadd出错时怎么清理这个命令的痕迹

虚析构和纯虚析构共性:

它目前实现创建派生窗口类对象的方式还是比较神奇的

所以需要一个函数来创建一个Window类的派生类的对象

虽然原来的

//case1newTunique_ptr(...)otherFunction()//case2newTotherFunction()unique_ptr(...)//case3otherFunction()newTunique_ptr(...)之中的一种

他这个触发事件的流程分为若干个步骤

glfwMakeContextCurrent之后再gladLoadGLLoader

可能需要修改一些头文件的包含

初始化包含ImGui::CreateContext();ImGui_ImplOpenGL3_Init()这两个函数

...//StarttheDearImGuiframeImGui_ImplOpenGL3_NewFrame();ImGui_ImplGlfw_NewFrame();ImGui::NewFrame();...//RenderingImGui::Render();...ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());然后就把这些写到自己的ImguiLayer的Update中

之前premake中我们设置将构建结果复制到指定目录下

于是glfw提供了根据键的序号查询键的状态的函数

这个类应该在任何地方都可以访问

单例还要把类的拷贝构造函数和赋值运算符重载函数设置成delete

例如glfw中#defineHZ_KEY_TAB258但是Windows中TAB是9

这些ImGui中的源文件就会被编译到工程中

原因是我们在E:\Hazel-master\Hazel\Sandbox\src\SandboxApp.cpp中调用了ImGui的API

例如在Engine项目的Core.h中添加这些定义

在Engine项目的Core.h中添加这些定义

#ifdefHZ_PLATFORM_WINDOWS#ifdefHZ_BUILD_DLL#defineHAZEL_API_declspec(dllexport)//#defineIMGUI_API_declspec(dllexport)//添加导出这一行不要了#else#defineHAZEL_API_declspec(dllimport)#defineIMGUI_API_declspec(dllimport)//添加导入#endif//HZ_BUILD_DLL#endif而在ImGui的premake5.lua中设置

我们不能直接再submodule里面添加文件

改成了静态库之后会修复一部分

解决方法就是删掉多余的a文件

m_Context.SwapBuffers();m_Context.GetSwapChain().Flush();之类的

官方Shader示例

方案1

没什么好说的

原视频没什么好说的

固定dt等于某一值

这里也会有死亡螺旋问题

比如写成

做了一个缩写

还有多线程的问题

利用ifstream来读取文件

现在是这么写

因为m_AspectRatio的定义是依赖于某一个轴的

同时这个proj矩阵也影响了世界中的一个单位是否是对应屏幕上的一个像素单位……

整理了一下文件

将2d部分的VAO摄像机渲染提交放到了一个Sandbox2D层中

Startingour2DRenderer

在OpenGLRendererAPI::Init()中设置了深度测试

其实就是一直写成采样*main_color的形式

他这个计时类的写法就很骚

你还可以自己用花括号做一个作用域出来

按照一定的格式把计时器记录的信息写成json

然后谷歌浏览器有一个内置的功能读取这个json输出时序图chrome://tracing

为DrawQuad函数添加了缩放比例和旋转角度这两个参数

shader也对应地更改

同样这里也没有做从存储了这32个Texture的map中删除元素的逻辑

可以使用flatv_TexIndex解决z-fighting

根据commit5e94d7da514829d69c22e93202319ade63f29d67

Debug模式和Release模式差距还挺大的

根据

OpenGL只能使用intuniform作为arrayuniform的index

采样精灵表

摄像机的OnResize函数是重新设置AspectRatio和Proj矩阵

所以要达成相同的目的还要这么写……

不知道为啥我没出现这个问题

原来是这么写的

程序主循环是这样的

马后炮只能分析到这里了

我们相当于是

除了OpenGL其他的渲染API是根本没有VertexArray这个概念所以VertexArray这个类要大改因为它不是一个Render跨平台通用的概念

介绍了一下entt的用法

总之我很混乱

空的结构体在使用的时候会出现问题

比如这里是在MeshComponent没有成员的时候出现的问题

之前他已经写过了一个OrthographicCamera

现在不知道为什么又写了一个Camera类

他应该是为了ECS里面的CameraComponent

我觉得这有点麻烦了说实话

为Camera创建了一个派生类SceneCamera

然后把OrthographicCamera中的一些东西搬到SceneCamera中

仍然觉得挺冗余

只是为了配合CameraComponent吧

应该只是为了演示这个思路才这么做的把

这个代码变得更奇怪了

emmmm感觉有点怪

感觉不像Script

类似

在ImGui各个按钮绘制之间设置了间隔

yaml-cpp的用法看一下代码里面是怎么写的就理解了

保存文件同理

ImGuizmo的使用方法

把原本用作EditorCamera的OrthographicCamera和OrthographicCameraController重命名为EditorCamera和EditorCameraController类

但是一般的shader的输出只有一个fragcolor

在创建纹理的时候提供一个RED_INTEGER的选项

他这个计算鼠标在视口中的0到1的坐标的做法可能需要看一下

左上角是0,0右下角是bound

添加了一个清理FBO的颜色附件的函数

所以还是要通过顶点属性传入

uniform本质上是告诉GPU在这次着色程序渲染的时候创建一个缓冲区

所以可以把uniform的设置抽象出来

这里就是创建了一个UniformBuffer基类

OpenGL的派生类里面是UBO的内容

GLSL->glslang->SPIR-VTools

需要的lib可见仓库的premake的lua文件

structTransform{mat4Transform;}uniformTransformu_RendererUniforms;但是Vulkan不会识别到

Vulkan的写法是

yaml-cpp.lib(stream.obj):errorLNK2038:检测到“RuntimeLibrary”的不匹配项:值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(EditorLayer.obj中)于是我把Editor和Engine的运行时库都改成Mtd

结果还是有错

所以我就把EditorEngineyaml-cpp的运行时库的设置都改成了/MDd就好了

需要创建shaderc的Compiler和CompileOptions对象

shaderc::Compilercompiler;shaderc::CompileOptionsoptions;options中设置了要编译到Vulkan

编译的话就用到compiler.CompileGlslToSpv

shaderc::Compilercompiler;shaderc::CompileOptionsoptions;options中设置了要编译到OpenGL

那么现在我们有vulkan的shader的二进制数据m_VulkanSPIRV我们想要opengl的shader的二进制数据m_OpenGLSPIRV

但是spirv没有直接在两个平台的二进制数据之间转换的功能

spirv_cross的使用也很简单

这应该算反射把……

比如uniformbuffers有多少啊之类的

直接用glShaderBinary和glSpecializeShader替换glShaderSource和glCompileShader

就是说可能出现版本不一致的问题

果然还是需要meta

层级显示

在这之前实现了图标显示

变为判断图片是否被点击if(ImGui::IsItemHovered()&&ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))

其他的没啥了

然后在别的地方应该调用if(ImGui::BeginDragDropTarget())

其中添加一个获得payload的逻辑

经过之间鼠标拖拽到viewport的操作

现在我们希望鼠标拖拽到组件属性中的一个地方就能设置纹理

可视化编程系统

2D的物理引擎

Callbacks系统

本地化

stripping代码剥离删除未使用或无法访问的代码例如将Editor代码从发布的游戏中剥离

联网

音频

Scene里的Update函数分为EditorUpdate和RuntimeUpdate函数

这个ImGui的dockingspace分支果然还是有点问题

可以显示cppinclude了哪些头文件

使用Box2D进行物理模拟

创建了全局唯一ID组件

他是在切换到播放模式OnScenePlay的时候从m_EditorScene复制一份场景到m_ActiveScene

所以还是在内存中一直存着m_EditorScene比较合理

添加了一个画圆的功能

同上

添加一个Component的流程……感觉很多都是重复的

其实EndScene就是一次提交

多做了一个物理模拟的模式

他这个写法还挺有意思的

那么逗号表达式的第一个表达式是一个生命周期仅存在于逗号表达式的lambda

终于不用我每次拉取的时候都手动把Dependencies里面的VulkanSDKDebug等等修改了

GLFW只调用GLFW_PRESSRELEASE

GL_REPEAT是在回调函数中的……

有点没懂

将引擎内的头文件放在最前面

我很好奇什么类型的size会为0

我记得空结构的size至少为1才对

他把std::filesystem::relative放到了点击事件中

这样就不用每一个循环中都使用一次这个函数

噢……涉及到OnImGuiRender的这种Update函数确实要小心

JetBrainDotPeek可以查看.NET的DLL中包含的代码

下载Mono

这里获得的是Mono要用到的.NET的库文件

在需要使用到Mono的项目的premakelua文件中添加link

那么我们在初始化Mono的代码中可以写

然后是创建应用域……就不再死复制教程了

感觉像一个独立的沙盒

这个函数的内容可以看教程

也就是说Hazel依赖于Hazel-ScriptCore

在Dependencies.lua中定义一些Windows的lib然后在引擎中link

具体可以看仓库

ScriptEngine.cpp定义的静态变量staticScriptEngineData*s_Data在VisualStudio的监视面板中会被识别为Renderer2D.cpp静态变量staticRenderer2DDatas_Data

我自己写的时候避免这个全局变量重名的情况就好了

嗯……就很神奇

教程已经很清楚了

这就没什么好说了

现在我们要序列化这个fileMap

反序列化也是一样的

现在我们要在一个C#的Entity的派生类的实例中获取另一个Entity的派生类的实例

在Unload某个AppDomain之间先mono_domain_set当前的RootDomain为false

这个commit还没有添加文件检测

这些都是可以做的……

使用了一个filewatch库来检测文件是否发生更改

//Application.hstd::mutexm_MainThreadQueueMutex;//Application.cppvoidApplication::SubmitToMainThread(conststd::function&function){std::scoped_locklock(m_MainThreadQueueMutex);m_MainThreadQueue.emplace_back(function);}voidApplication::ExecuteMainThreadQueue(){std::scoped_locklock(m_MainThreadQueueMutex);for(auto&func:m_MainThreadQueue)func();m_MainThreadQueue.clear();}voidApplication::Run(){while(m_Running){...ExecuteMainThreadQueue();...}}暂停和步进PausingandStepping在内置的OnUpdate中设置条件判断if(!m_IsPaused||m_StepFrames-->0)通过后才能Update

THE END
1.Zlibrary对于热爱阅读却预算有限的朋友来说,Z-Library提供了一个理想的解决方案。这个在线图书馆拥有超过1000万本书籍和8000万篇文章,包括众多经典名著,全部免费。 访问Z-Library 一、官方访问入口 https://vlink.cc/zlib2025(直接访问,长期更新) 以下是一些经过测试,截至2024年9月29日可以直接访问的Z-Library网站入口(需代https://m.clzg.cn/article.html?id=665021
2.zlibrary镜像网址最新zlibrary镜像网址入口2023,zlibrary官网登录,全球最大的数字图书馆 网站服务:zlibrary官网登录,zlibrary镜像网站,zlibrary镜像网址。 Z-Library – 世界上最大的电子图书馆。自由访问知识和文化。 | Z-Library. Download books for free. Find books https://openi.cn/sites/109541.html
3.[2024912]如何在Z[2024-9-12]如何在Z-Library中免费下载书籍讲解流程 无不良引导,共享知识,书籍乃进步阶梯。 一、登录官网 https://z-lib.io/ 按要求进行注册。 二、下载Discord https://discord.com/ 经过我的测试网页版应该是没有注册功能的,先下载再注册。 三、免费下载书籍https://blog.csdn.net/naozibuok/article/details/142172707
4.ZLibrary可用网址及镜像网站曾于2022年11月3日遭到美国政府的封锁,但是2023年2月11日用户已可再次访问Z-Library。重生后的Z-Library有新的官方网址和镜像,不过似乎很多用户还不知道,仍在使用一些不安全的仿冒山寨网站,甚至钓鱼网站。 官方最新消息(4月17日):https://z-library.se/blog/50https://lib.bttc.edu.cn/info/1017/1761.htm
5.Zlibrary国内镜像网站入口链接有哪些Zlibrary官方镜像入口链接地址 Zlibrary网址:https://zh.1lib.world/ Zlibrary网址:https://zh.art1lib.com/ Zlibrary网址:https://zh.zlibrary.org Zlibrary网址:https://zh.webbooksnow.org Zlibrary镜像网址:http://zh.zlib.life Zlibrary镜像网址:https://zh.1lib.cloud/ https://m.vqs.com/article/20014.html
6.Zlibrary入口/国内最新官网地址及镜像网址(持续更新)本文将持续更新国内可访问 Z- 的官网、镜像网站及客户端信息,建议收藏。 一、Z- 最新镜像/官方入口 以上为截至 2024 年 11 月 22 日测试可正常使用的官方/镜像地址。 二、Z- 客户端入口(推荐) /mac/Linux/安卓app客户端下载: (随时失效,先保存再下载) http://www.5wst.com/77961.html
7.zliabary图书馆官方入口zliabary镜像网站登录入口zliabary图书馆官方入口,zliabary图书馆为用户提供丰富的图书资源,各种电子书籍都能在这里搜索到,不管你是喜欢阅读的用户还是需要学习专业知识的研究者都能在这里找到你想要的内容,是一个十分强大的图书网站,许多用户还不知道如何找到zliabary图书馆官方入口,接下来就为大家进行详细介绍,一起来看看吧! https://m.mowan123.com/news/28253.html
8.zlibrary电子图书馆官网网址入口zlibrary电子图书馆官网网址入口 zlibrary是全球最大的电子图书馆之一,由于大家都知道的原因,zlibrary的主域名和许多的镜像网址都被封禁了。但是还是有个别网址是能够正常访问的,小编通过关注zlibrary官方telegram账号,获得了zlibrary目前还可以正常访问的网址,现在分享给大家。如果你不能正常打开,则需要海外网络,大家都懂https://youxihudie.com/gonglue/52055.html
9.zliabary镜像网站网址分享zliabary图书馆官方入口zliabary镜像网站网址分享,zliabary图书馆是一款拥有超多类型小说的平台,全部都是免费的,直接点击网址登录即可免费看小说了。很多用户都想要知道zliabary国内镜像网站网址是哪个?接下来小编就带来详细的zliabary国内图书馆官方入口分享。 zliabary图书馆官方入口: https://www.dadighost.com/help/65222.html
10.library.skshu.com/yyys70316690.shtml槽溜视频app下载官方 黄色网站入口h 亚洲精品18久久久久久丰满片 少妇厨房愉情理伦片免费 不卡的黄色在线 日韩操逼网 被C哭着爬走回来挺进H男男视频 一级黄色作爱片 天天天天天天天天天天三级片视频 旗袍美女被c到流水 巨大黑人XXXAAAA 南京巨根无套内射 a'v在线资源 18?流出白浆啪啪手游 18禁http://library.skshu.com/yyys70316690.shtml
11.ZLibrary数字图书馆官网镜像网站使用下面工具访问收到的zlibrary网址,如果有账号就登录,没有就随便注册一个即可下载(下载选择发送到邮箱即可) Anywhere 输入网址即可访问网站 Z-Library官网地址: z-libray官网登录入口1:https://singlelogin.rs z-libray官网登录入口2:https://zh.singlelogin.rs/ https://www.bgrdh.com/sites/6145.html
12.[更新]zlibrary最新入口https://zlibrary-global.com/ 2023/06/04 https://singlelogin.re/ Z-Library Project - Electronic library. Download books free Z-Library – 世界上最大的电子书图书馆。 您通往知识的大门 (zlibrary-asia.se) Z-Library Project - Electronic library. Download books free 2020/08/12 http://bookzzhttps://www.jianshu.com/p/2646065e2e76
13.www.sjzyl99.com/moken54718.html老鹰队,小南斯16分4篮板3助攻2抢断,里萨谢10分4篮板,卡佩拉9分10篮板,出现5次犯规,难以限制约基奇的内线单打。特雷杨15分4篮板10助攻3抢断,前3节仅仅得到3分。丹尼尔斯18分4篮板6助攻5抢断,展现了全能的身手。奥孔武14分9篮板,亨特20中7得到20分3篮板,进攻效率有待提升。 http://www.sjzyl99.com/moken54718.html
14.Zlibrary的官网地址是什么zliabary图书馆官网 1.官网:https://singlelogin.re/ 2.镜像站1:https://zlib.app/ 3.影子站点:zh.annas-archive.org 4.镜像站1:https://1lib.tk/(暂时无效) 5、快速入口:https://zlib.yibook.org/ 想了解更多关于Zlibrary的官网地址是什么的内容,请扫微信 https://www.soufuzi.com/ziyuan/1824
15.Zlibrary—全球最大的数字图书馆,900万本名著免费下载!zlibrary3,Library Genesis:https://www.tboxn.com/sites/1248.html 域名九:https://zmirror.tk/可直接访问) 域名八:https://zlibrary.pw/(可直接访问) 域名七:https://zhelper.tk/(快捷入口,自动登录账号) 域名六:https://zlib.shop(需要关注公众号) https://www.dzpc.net/resources/network-digest/71227.html
16.Zlibrary最新地址Zlibrary最新地址 Zlibrary最新入口浏览人数已经达到 3,581,如你需要查询该站的相关权重信息,可以点击"5118数据""爱站数据""Chinaz数据"进入;以目前的网站数据参考,建议大家请以爱站数据为准,更多网站价值评估因素如: Zlibrary最新地址 Zlibrary最新入口的访问速度、搜索引擎收录以及索引量、用户体验等;当然要评估一https://iitang.com/sites/17869.html
17.全球最大盗版电子书网站ZLibrary:又被美国查封了快科技5月5日讯,沉默了几个月后,美国执法部门开始了针对Z-Library的新一轮打击。 最近几日,Z-Library多个新的主域名被查封,点击后弹出FBI提示。随后,Z-Library通过社媒确认了部分域名被攻击下线的消息,并给出了击中可供登陆的备选方法。 据悉,去年11月,号称是全球最大电子图书馆的Z-Library被美国FBI封禁,连同https://tech.ifeng.com/c/8PXop5HTTWn&wd=&eqid=c1dd1715001f8a700000000464575a0e
18.Z文章目录 ZLibrary访问地址 备份及替代网站等 Z-Library 是世界上最大的数字图书馆,可以免费下载很多电子书,我们通常忽略中间的横线写做ZLibrary(字母“Z”后边的“ZLibrary”即“图书馆”的意思,看到网上有做“zliabary”或“zlibirary”的均为误写)。 ZLibrary无需注册即可免费下载书籍,不过访客一天内只能下载5https://www.1itao.com/z-library.html
19.zliabary图书馆登录入口zliabary图书馆入口地址zliabary图书馆是一款蕴含了超多类型的小说平台,只需要登录即可体验zliabary的内容了,但是不少小伙伴还不清楚入口地址是什么,那么下面就让小编为大家带来zliabary图书馆入口地址介绍。 zliabary图书馆登录入口 Zlibrary网址入口:>>点击进入<< 备用网址:>>点击进入<< https://app.ali213.net/mip/gl/1280717.html
20.Zlibrary最新官方地址+注册教程获取个人独立域名!马小帮3,然后就是大家非常熟悉的页面,登录账号后没天可以免费下载10次! 4,点击右上角的更多按钮,点击 Z – Access ,即可进入更多访问Zlibrary 渠道的页面 5,这里有电脑客户端、有安卓app,还有你的独享域名。记住独享域名,再也不怕官方入口失效! 6,通过独享域名访问,需要只需要输入你的登录密码即可。https://www.360doc.cn/article/86859_1118004301.html
21.Zlibrary国内镜像网站入口链接有哪些Zlibrary国内镜像网站入口链接有哪些-Zlibrary官方,当下,社会物质文明越来越发达,而人们的道德水平每况愈下;制度规范越来越细化,道德规范越来越淡化。孝悌之义,被抛到了九霄云外。http://www.wisecitytech.com/osxei/9207434773.shtml
22.Zlibrary镜像入口全站链接内容审核中,审核后会逐步放开 这段时间,我们会在公众号继续更新网站推荐,请关注公众号 相似资源 免费GPT4/AI写作 AI论文一键生成 Midjourney AI作图 小虎队软件 淘号阁游戏账号交易-找回包赔 免费看足球比赛直播 讯飞星火AI助手 下歌吧高清音乐 https://www.bidianer.com/site/349279
23.zlibirary电子图书馆zlibirary镜像入口z-libirary官 网登录入口:https://z-lib.is/ Zlibrary被称为全球最大的数字图书馆,里面包含 9.826.996 本电子书,84.837.646 篇期刊文章。 从各种知名文学著作,理工学科,人文艺术、到学术论文等应有尽有!绝对是你找书的不二选择。 该网站自2009年起所有图书文章全部免费下载,支持PDF、epub、mobi等多种格式图http://www.csshytbc.cn/news/2712.html
24.ZZlibrary这个站很出名,号称全网书最多的电子书站,目前共收录了9778852本书,并且每天都会新增5到10本新书。这些书都提供epub格式的文档下载,还能直接推送到kindle,有些书还有PDF格式的,可以在线观看。 Zlibrary里的书以国外的书为主,经济科学的应有尽有,搜索的时候可以切换语言。不知道看啥的朋友,可以去看看公共书单https://www.hurbai.com/amp/380
25.ZLibraryZLibraryLoginhttps://zlibrary-global.se/ (Working October 2023) https://z-library.se/ (Working October 2023) https://zlibrary-asia.se/ (Working October 2023) https://go-to-zlibrary.se/ (Official Help Website) TOR Links: Current TOR Z-Library login address. You need to download the TOR browser http://librarygenesis.pro/z-library/